重构-改善既有代码的设计读书笔记 2
2.1 何谓重构?
首先要说明的是:视上下文不同,重构」这个词有两种不同的定义。
第一个定义是名词形式:
重构(名词):对软件内部结构的一种调整,目的是在不改变「软件之可察行为」
前提下,提高其可理解性,降低其修改成本。
「重构」的另一个用法是动词形式:重构(动词):使用一系列重构准则(手法),在不改变「软件之可察行为」前提下,调整其结构。
通过重构可以增强代码的可读性,可维护性,可复用性,延续软件的生命周期,降低代码复杂度,解放人力成本。是软件能适应后续的业务逻辑变更。
值得注意的是:重构不会改变软件「可受观察之行为」重构之后软件功
能一如继往。
任何用户,不论最终用户或程序员,都不知道已有东西发生了变化。
使用重构技术开发软件时,把自己的时间分配给两种截然不同的行为:「添加新功能」和「重构」。添加新功能时,不应该修改既有代码,只管添加新功能。通过测试(并让测试正常运
行),可以衡量自己的工作进度。重构时就不能再添加功能,只管改进程序
结构。此时不应该添加任何测试(除非发现先前遗漏的任何东西),只在绝对必要(用以处理接口变化)时才修改测试。
2.2为何重构?
1.「重构」改进软件设计如果没有重构,程序的设计会逐渐变质。当人们只为短期目的,或是在完全理解整体设计之前,就贸然修改代码,程序将逐渐失去自己的结构,程序员愈来愈难通过阅读源码而理解原本设计。重构很像是在整理代码,你所做的就是让所有东西回到应该的位置上。代码结构的流失是累积性的。愈难看出代码所代表的设计意涵,就愈难保护其中设计,于是该设计就得愈快。经常性的重构可以帮助代码维持自己该有的形态。
2.「重构」使软件更易被理解.
团队中各自风格迥异的代码显为人见,通过重构调整是统一编码风格,制定编码规范,提高团队效率。
2.3 何时重构?
「重构」助你找到( bugs)。重构应该是随时进行的。重构能帮助我们把代码变得优美,逻辑变得清楚易懂。
第一次做某件事时只管去做;第二次做类似的事会产生反感,但无论如何还是做了;第三次再做类似的事,就应该重构。事不过三,三则重构。
a.添加功能时一并重构,最常见的重构时机就是我想给软件添加新特性的时候。
重构的另一个原动力是:代码的设计无法帮助我轻松添加我所需要的特性.
b.修补错误时一并重构
c.复审代码时一并重构
大多数时候,我们都只关注自己今天想要程序做什么。不论是修复错误或是添加特性,我们都是为了让程序能力更强,让它在今天更有价值.
2.4
软件开发者都是专业人士。我们的工作就是尽可能快速创造出高效软件。我的经验告诉我,对于快速创造软件,重构可带来巨大帮助。如果需要添加新功能,而原本设计却又使我无法方便修改,我发现先「进行重构」再「添加新功能」会更快些。如果要修补错误,我需得先理解软件工作方式,而我发现重构是理解软件的最快方式。受进度驱动的经理要我尽可能快速
完事,至于怎么完成,那就是我的事了。最快的方式就是重构,所以我就重构。
a. 间接层和重构
b. 允许逻辑共享.
c. 分开解释「意图」和「实现」
d. 将变化加以隔离(To isolate change)
如果运用重构,你就永远不会面临全盘错误的危险。程序自始至终都能保持一致的行为,而有机会为程序添加更多价值不菲的质量。