我们都希望我们程序代码可读性强、逻辑清淅、表达条件逻辑简单、系统易扩展以及后期维护方便等。可现实中太多数程序并不是如此。我们应该见过很多难以阅读、逻辑重复(duplicated logic)、添加新行为时需要修改既有代码、充斥中大量的复杂条件逻辑(complex conditional logic)的程序。这时心里肯定在骂人了,我们应该怎么去面对这么一个项目呢?推倒重来成本太高,项目经理又在后面催着要交工。这时我们就需要运用“重构”(refactoring)技术来改善既有程序的结构设计和代码了。
一、何谓重构
Refactoring(noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without changings its observable behavior of the software.
重构(名词):对软件内部结构的一种调整,目的是在于不改变软件之可察行为前提下,提高其可理解性,降低其修改成本。
Refactoring(verb): to restructure software by applying a series of refactoring without changing the observable of the software.
重构(动词):使用一系列重构准则(手法),在不改变软件之可察行为前提下,调整其结构。
二、为何重构
重构可以改进软件设计,如果没有重构,程序的设计会慢慢地变质。代码结构的流失是累积性的,愈难看出代码所表示的设计意图,就愈难保护其中的设计,于是设计就慢慢离当初的目标远了。重构可以帮助代码维持当初的形态。
重构使软件更易被理解。
重构可以找到更多的BUG。
重构可帮助你提高编程速度,良好的设计是软件开发速度的根本。糟糕的设计,会让你把时间花在调试代码上,更无法添加新功能。重构可以帮助你更快地开发软件,提高设计质量。
三、何时重构
重构是程序开中的一个重要环节,但不是特别专门规定时间来做的事情,重构应该随时随地进行。
添加新功能时进行重构
修改错误时进行重构
复审代码时进行重构
四、测试体系
拥有一个可靠的测试环境,对于重构来说是必须的,这样你就不会花大部分时间用在代码的调试上,Bug的查找中。
Before you start refactoring,check that you have a solid suite of tests.These tests must be self-checking.
重构前,先检查自己是否有一套可靠的测试机制。这些测试必须有自我的检验能力。
五、重构准则
平时在重构中我用到最简单、最常用也是最有效的有如下几种方法:
1. Extract Method
2. Inline Method
3. Replace Temp With Query
4. Substitute Algorithm
5. Move Method
6. Extract Class
7. Decompose Conditional
8. Consolidate Conditional Expression
9. Consolidate Duplicate Conditional Fragments
10. Rename Method
.........更多更详细的准则请查阅书本
这篇文章主要来自与《设计模式》齐名的经典巨著《重构--改善既有代码的设计》(中文版),也是我个人的学习中基本的理解和总结,力荐筒子们看看此书。在此需要感谢一人,之前公司的同事: 肖正光 博士。这本书是他送给我的,才让我更早地接触到了这门技术。肖博:谢谢!
1万+

被折叠的 条评论
为什么被折叠?



