-
重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本。
-
重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。
-
重构绝对不是所谓的“银弹”
-
重构很像是在整理代码,代码结构的流失是累积性的,越难看出代码所代表的设计意图,就越难保护其中设计
-
改进设计的一个重要方向就是消除重复代码,这个动作的重要性在于方便未来的修改,消除重复代码正是优秀设计的根本
-
这就是重构游戏:在保持系统现有行为的前提下,如何才能提高系统的质量或降低其成本,从而使它更有价值?
-
“我不是个伟大的程序员,我只是一个有着优秀习惯的好程序员”——Kent Beck
-
添加功能时重构(如果用某种方式来设计,添加特性会简单的多),修补错误时重构(代码没有清晰到让你一眼看出bug),复审代码时重构(重构可以帮助代码复审工作得到更具体的结果,用UML示意图展现设计,并以CRC卡展现情节)
-
系统当下的行为只是整个故事的一部分,如果没有认清这一点,你无法长期从事编程工作。如果你为求完成今天的任务而不择手段,导致不可能在明天完成明天的任务,那么最终还是会失败
-
难以阅读的程序难以修改,逻辑重复的程序难以修改,添加新行为时需要修改已有代码的程序难以修改,带复杂条件逻辑的程序难以修改。
-
我们希望程序容易阅读,所有逻辑都只在唯一地点指定,新的改动不会危及现有行为,尽可能简单表达条件逻辑
-
重写(而非重构)的一个清楚讯号就是:现有代码根本不能正常运作。记住,重构之前,代码必须起码能够在大部分情况下正常运作。
-
重构肩负一项特殊使命:它和设计彼此互补。如果没有重构,你就必须保证预先做出的设计正确无误,这个压力太大了。
-
灵活的解决方案比复杂的解决方案复杂许多,所以最终得到的软件通常也更难维护。
-
哪怕你完全了解系统,也请实际度量它的性能,不要臆测。
-
除了对性能有严格要求的实时系统,其他任何情况下“编写快速软件的秘密”就是:首先写出可调的软件,然后调整它以获得足够速度。
-
优秀的程序员肯定会花一定的时间来清理/整理自己的代码。
-
重构时一门非常重要的技术。
-
坏味道行列中首当其冲的就是Duplicated Code. 你必须决定这个函数放在哪最合适,并确保它被安置后不会在其他任何地方出现
-
拥有短函数的对象活得比较好,比较长。
-
间接层所能带来的全部利益:解释能力,选择能力,共享能力——都是由小型函数支持的,小函数容易理解的真正关键在一个好名字
-
我们应该更积极的分解函数,每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名,我们可以对一组甚至短短一行代码做这件事,哪怕替换后的函数调用动作比函数自身还长,只要函数名称能够解释其用途,关键在于函数“做什么”和“如何做”之间的语义距离
-
条件表达式和循环常常也是提炼的信号
-
和“太多实例变量”一样,类内如果有太多代码,也是代码重复/混乱并最终走向死亡的源头
-
太长的参数列难以理解,太多参数会造成前后不一致,不易使用,而且一旦你需要更多数据,就不得不修改它
-
将总是一起变化的东西放在一块
-
对象的一个极大的价值在于:他们模糊(甚至打破)了横亘于基本数据和体积较大的类之间的界限。
-
面向对象程序的一个最明显的特征就是:少用switch(或case)语句,从本质上说,switch语句的问题在于重复。
-
你也许会看到某个类接口有一半的函数都委托给其他类,这样就是过度运用,这样应直接和真正负责的对象打交道
-
当你感觉需要撰写注释时,请先尝试重构,试着让所有注释都变得多余
-
编写优良的测试程序,可以极大提高编程速度,即使不进行重构也一样如此
-
确保所有测试都完全自动化,让它们自己检查测试结果
《重构-改善既有代码的设计》读书笔记(一)
最新推荐文章于 2018-11-19 21:03:21 发布