重构-改善既有代码的设计
??? 最近在看这本书,个人感觉非常有用,提高个人对程序的认识,与大家分享下,等看完,理解后再来发表感想。
?
作者:Martin Fowler,Kent Beck,John Brant ,William Opdyke ,Don Roberts
翻译:侯捷、熊节
序言
by Erich Gamma
重构(refactoring)这个概念来自Smalltalk圈子,没多久就进入了其他语言阵营之中。由于重构是framework(框架〉开发中不可缺少的一部分,所以当framework开发人员讨论自己的工作时,这个术语就诞生了。当他们精炼自己的class hierarchies (类阶层体系〉时,当他们叫喊自己可以拿掉多少多少行代码时,重构的概念慢慢 浮出水面。framework设计者知道,这东西不可能一开始就完全正确,它将随着设 计者的经验成长而进化;他们也知道,代码被阅读和被修改的次数远远多于它被编 写的次数。保持代码易读、易修改的关键,就是重构——对framework如此, 对一般软件也如此。
好极了,还有什么问题吗?很显然:重构具有风险。它必须修改运作中的程序,这 可能引入一些幽微的错误。如果重构方式不恰当,可能毁掉你数天甚至数星期的成果。如果重构时不做好准备,不遵守规则,风险就更大。你挖掘自己的代码,很快发现了一些值得修改的地方,于是你挖得更深。挖得愈深,找到的重构机会就越多… 于是你的修改也愈多。最后你给自己挖了个大坑,却爬不出去了。为了避免自掘坟墓,重构必须系统化进行。我在《Design Patterns》书中和另外三位(协同)作者曾经提过: design patterns(设计模式)为refactoring (重构〉提供了目标。然而「确 定目标」只是问题的一部分而己,改造程序以达目标,是另一个难题。
?
Martin Fowler和本书另几位作者清楚揭示了重构过程,他们为面向对象软件开发所做的贡献,难以衡量。本书解释重构的原理(principles)和最佳实践方式(best practices),并指出何时何地你应该开始挖掘你的代码以求改善。本书的核心是一 份完整的重构名录(catalog of refactoring),其中每一项都介绍一种经过实证的代码变换手法(code transformation)动机和技术。某些项目如Extract Method和Move Field看起来可能很浅显,但不要掉以轻心,因为理解这类技术正是有条不紊地进行重构的关键。本书所提的这些重构准则将帮助你一次一小步地修改你的代 码,这就减少了过程中的风险。很快你就会把这些重构准则和其名称加入自己的开发词典中,并且朗朗上口。
我第一次体验有纪律的、一次一小步的重构,是在30000英呎高空和Kent Back共 同编写程序(译注:原文为pair-programming,应该指的是eXtreme Programming中的所谓「成对/搭档编程」)。我们运用本书收录的重构准则,保证每次只走一 步。最后,我对这种实践方式的效果感到十分惊讶。我不但对最后结果更有信心, 而且开发压力也小了很多。所以,我高度推荐你试试这些重构准则,你和你的程序都将因此更美好。