最近在重新读《重构》这本书,关于第二章 重构原则,我摘录出一些要点,和大家分享一下。
重构:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
使用重构技术开发软件时,你把自己的时间分配给两种截然不同的行为:添加新功能,以及重构。添加新功能时,你不应该修改既有代码,只管添加新功能。通过测试,你可衡量自己的工作进度。重构时你就不能再添加功能,只管改进程序结构。此时你不应该添加任何测试(除非发现有先前遗漏的东西),只在绝对必要(用以处理接口变化)时才修改测试。
如果消除重复代码,你就可以确定所有事物和行为在代码中只表述一次,这正是优秀设计的根本。
编程模式的核心就是”准确的说出我所要的”。
Kent Beck经常形容自己的一句话:“我不是个伟大的程序员,我只是个有着一些优秀习惯的好程序员”。
良好的设计是快速开发的根本——事实上,拥有良好设计才可能做到快速开发。
最常见的重构时机就是我想给软件添加新特性的时候。重构的另一个动力是:代码的设计无法帮助我轻松添加我所需要的特性。
是什么让程序如此难以相与?眼下我能想起下述四个原因,它们是:
难以阅读的程序,难以修改
逻辑重复的程序,难以修改
添加新行为时需要修改已有代码的程序,难以修改
带复杂条件逻辑的程序,难以修改
因此,我希望程序:
(1)容易阅读
(2)所有逻辑都只在唯一地点指定
(3)新的改动不会危及现有行为
(4)尽可能简单表达条件逻辑
重写(而非重构)的一个清楚讯号就是:现有代码根本不能正常运行。
记住,重构之前,代码必须能够在大部分情况下正常动作。
重构肩负一项特殊使命:它和设计彼此互补。
你仍然做预先设计,但是不必一定找出正确的解决方案。此刻你只需要得到一个足够合理的解决方案就够了。
教训:哪怕你完全了解系统,也请实际度量它的性能,不要臆测。臆测会让你学到一些东西,但十有八九你是错的。
除了对性能有严格要求的实时系统,其他任何情况下“编写快速软件”的秘密就是:首先写出可调的软件,然后调整它以求获得足够速度。
在性能优化阶段,你首先应该用一个度量工具来最后的监控程序的运行,让它告诉你程序中哪些地方大量消耗时间和空间。