《重构 改善既有代码的设计》读书笔记

 

本书可以被看成是一本重构方法的手册。且因为本书成书较早,所以很多重构手段都被大家耳熟能详并从入门开始都被当成的编码规范。所以很大程度上阅读本书也算是温习。

  1. Kent Beck:我不是个伟大的程序员,我只是个有着一些优秀习惯的好程序员。
  2. (大多数时候)不需要专门安排时间重构,重构应该随时随地进行。你不应该为重构而重构,你之所以重构,是因为你先做别的什么事,而重构可以帮助你把那些事做好(比如效率更高,能容易扩展)。重构与编码总是伴随进行的。重构不是一劳永逸的,我们需要在系统发展中不断的进行,不断重构出适应未来的代码(而且这个未来往往也只能指未来一段时间,而非永远)。
  3. “三次法则,事不过三,三则重构。” 实际上,有了IDE的帮助,但第二次相同代码出现时,IDE就会提示需要重构了。
  4. 把未完成的重构工作形容为「债务」。
    Ward Cunningham对此有一个很好的看法。他把未完成的重构工作形容为「债务」。很多公司都需要借债来使自己更有效地运转。但是借债就得付利息,过于复杂的代码所造成的「维护和扩展的额外开销」就是利息。你可以承受一定程度的利息,但如果利息太高你就会被压垮。把债务管理好是很重要的,你应该随时通过重构来偿还一部分债务。
    如果项目己经非常接近最后期限,你不应该再分心于重构,因为己经没有时间了。不过多个项目经验显示:重构的确能够提高生产力。如果最后你没有足够时间,通常就表示你其实早该进行重构。
  5. 从重构联想到软件复用和技术传播
    Geoffrey Moore 把「技术的接纳过程」描述为一条钟型(bell-shaped )曲线:前段包括先行者(innovators )和早期接受者(early adopters),中部急剧增加的人群包括早期消费群体(early majority )和晚期消费群体( late majority),后段则是那些行动缓慢者(laggards)。一个思想或产品如果要成功,必须得到早期消费者和晚期消费者的广泛支持。另一方面,许多对于先行者和早期接受者很有吸引力的想法, 最终彻底失败,因为它们没能跨越鸿沟,让早期消费者和晚期消费者接纳它们。之所以有这样的鸿沟是因为,不同的消费人群有着不同的消费动机。先行者和早期接受者感兴趣的是新技术、「范式移转和突破性思想」的愿景(visions of paradigm shifts and breakthroughs)。早期和晚期消费群则主要关心成熟度、成本、支持,以及这种新思想或新产品是否被「与他们有着相似需求」的其他人成功套用。
    要打动并说服软件开发者,所需方式和打动并说服软件研究者是完全不同的。软件研究者通常是Moore 所说的「先行者」,软件开发者(尤其是软件经理)则往往属于早期或晚期消费者。如果想要让你的思想深入所有人心,了解这一差异是非常重要的。是的,无论软件复用或重构,要想打动软件开发者,这一点都至关重要。