重构的目的
重构不是包治百病的万灵丹,绝对不是所谓的“银弹”。不过它的确很有价值,可以帮助你始终良好的控制自己的代码。
重构是个工具,用于以下几个目的:
1.重构改进软件设计
如果没有重构,程序的设计会逐渐腐坏。当人们只为短期目的,或是在完全理解整体设计之前,就贸然修改代码,程序将逐渐失去自己的结构,程序员愈来愈难通过阅读源码来理解原来的设计。重构很像在整理代码,你所做的就是让所有东西回到应处的位置上。代码的结构的流失是累积性的。愈难看出代码所代表的设计意图,就愈难保护其中设计,于是该设计就腐烂的愈快。经常性的重构可以帮助代码维持自己该有的形态。
完成同样一件事情,设计不良的程序往往需要更多的代码,这常常是因为代码在不同的地方使用完全相同的语句在做同样的事情。因此改进设计的一个重要方向就是消除重发代码。这个动作的重要性在于方便未来的修改。代码量减少并不会使系统运行更快,因为这对程序的运行计划没有任何明显的影响。然而代码量的减少将使未来可能的程序修改动作容易的多。代码愈多,正确的修改就愈难,因为有更多的代码需要理解。你在这儿做了点修改,系统却不如预期的那样工作,是因为你没有修改另一处——那儿的代码做着几乎完全一样的事情,只是所处的环境略有不同。如果消除重复代码,你就可以确定所有事物和行为在代码中只表述一次,这正是优秀设计的根本。
2.重构使软件更容易理解
所谓程序设计,很大程度上就是与计算机交谈:你编写的代码告诉计算机做什么事,它的响应则是精确按照你的指示行动。你得及时填补“想要它做什么”和“告诉它做什么”之间的缝隙。这种编程模式的核心就是“准确说出我所要的”。除了计算机外,你的源码还有其他读者:几个月之后可能会有另一位程序员尝试读懂你的代码并做一些修改。我们很容易忘记这第二位读者,但他才是最重要的。计算机是否多花了几个小时编译,又有什么关系呢?如果一个程序员花费一周时间;来修改某段代码,那才要命呢——如果他理解了你的代码,这个修改原本只需要一个小时。
问题在于,当你努力让程序运转起来的时候,不会想到未来出现的那个开发者。是的,我们应该改变一下开发节奏,对代码做适当修改,让代码变得更容易理解。重构可以帮助我们让代码更易读。一开始进行重构的时候,你的代码能正常运行,但结构不够理想。在重构上花一点点时间,就可以让代码更好的表达自己的用途。这种编程模式核心就是准确的说出我所要的。
3.重构帮助找到bug
对代码的理解,可以帮助找到bug。如果对代码进行重构,可以深入理解代码的作为,并恰到好处的把新的理解反馈回去。搞清楚程序结构的同时,也清楚了自己所做的一些假设。
Kent Beck说过一句话:我不是个伟大的程序员,我只是个有着一些优秀习惯的程序员。重构能帮助更有效的写出强健的代码。
4.重构提高编程速度
重构帮助你更快速的开发程序。
听起来有点违反直觉。当谈到重构时候,人们很容易看出它能够提高质量。改善设计、提高可读性、减少错误,这些都是提高质量。
但很重要的是,良好地设计师快速开发的根本——事实上,拥有良好的设计才可能做到快速开发。如果没有良好的设计,或许某一段时间内你的进展神速,但恶劣的设计很快让你的速度慢下来。你会把时间放在调试上,无法添加新功能。修改时间越来越长,因为你必须花越来越多的时间去理解系统、寻找重复代码。随着你给最初程序打上一个又一个补丁,新特性需要更多的代码才能实现。这是恶性循环。
良好的设计师维持软件快速开发的根本。重构可以帮助你更快速的开发软件,因为它阻止了系统腐烂变质,甚至还可以提高设计质量。
上一篇: JMS消息传送模型
下一篇: 对于索引假脱机的一点理解