何谓重构:
对软件内部结构的一种调整,目标是在不改变软件行为(软件之可查行为)的情况下,提高其可理解性,降低修改成本。
为何重构:
1.改进软件设计:经常性的重构,可以帮助代码保持自己该有的形态。其中一个重要方向是消除重复代码(Duplicate Code),这个方向的重要性主要是着眼与未来,重构后的代码的运行轨迹几乎不会发生改变,所以它的性能不会有明显提高,但可以提高以后修改的效率。
2.使软件更容易被理解:随着代码的简洁,还可以看到一些关于设计层方面的东西。所以Ralph Johnson这种早期的重构称为"擦掉玻璃上的污垢,使你看得更远".
3.帮助你找到BUG:随着对代码理解的深入,搞清楚代码结构的同时,想不找到BUG都难
4.提高编程速度:良好的设计才能达到快速开发,否则会将大量时间用在调试,理解系统,寻找重复代码上。
何时重构:
1.Don Roberts提出了三次法则:第一次做某件事情时,只管去做。第二次做某件事情时,会产生反感,但最后还是做了。第3次做某件事情时,就应该重构了
2.在添加新功能的时候一并重构。其中一个原因是在前进过程中,把代码结构理清,可以从代码中学到更多东西。还有另一个重要特性,当前代码无法帮助我快速的完成另一个新功能。
3.修补错误时一并重构。在调试过程中运用重构,多半是为了让代码具有更高的可读性。当发生错误时,这个就是需要重构的信号,因为现在的代码还不够清晰的让你一目了然的发现错误。
4.复审代码时一并重构。
间接层和重构:
计算机科学是这样一门科学:它相信所有的问题都可以通过多一个间接层(Indirection)来解决.
间接层有以下价值:
1.允许逻辑共享. 比如一个子函数在不同地方被调用.
2.分开解释[意图]和[实现]. 很简单,其实就是选择合适的类名和函数名,然后在各自内部实现.
3.将变化加以隔离. 如果有一个对象在多处使用,而其中有一处需要修改它,可以做一个SubClass,将需要修改的地方,在此处引用,而无须承担影响多处的风险.
4,将条件逻辑加以编码. 将条件逻辑转换为向某个对象发送消息,往往能增加代码的复用,增加清晰度.