之后的所有章节中,重构方法的介绍都遵循以下标准格式:
序号步骤内容1名称建造一个重构词汇表,名称很重要,这个名称将会被用在此书任何地方。2简短概要简单介绍这种重构方法的使用场景,以及它所做的事情。这能让你更快地找到所需的重构方法。3动机为什么需要这种重构方法,什么情况应该使用这个,什么时候不应该使用4做法简明扼要地一步一步介绍如何进行此重构5范例一个简单的例子,说明这种重构方法的过程 概要内容:包括三个部分。一句话,介绍这个重构能够帮助解决的问题。
一段简短陈述,介绍你应该做的事。
一幅速写图,简单展现重构前后示例:有时展示代码,有时展示UML图。哪种更好呈现该重构的本质就用哪种。
做法:详细的步骤,可以结合范例来看。如果事后想要复习这种重构方法,可以参考这一部分,会让你记起来应该如何去使用。
范例:一个简单的教科书。
这本书即将完成的时候,Java2已经正式发布。 也就是说,这本书的确很老,所以里面有些例子仅供参考,主要是学习重构如何进行,而不是学如何敲代码。
很多重构都会要求找到某个方法、某个字段或某个类的所有引用点,此时,记得借助搜索工具。
需要注意的是,在文本查找时,不要直接一次性全部替换,因为可能会出错。
现在主流的JavaIDE(如eclipse和idea)都能相当准确的找到程序元素的引用点,但如果使用Java之外的语言,这节内容的技巧还是要有的。
在强类型语言中,往往可以直接删除旧部分,然后让编译器去寻找编译报错的地方,可惜这样的技巧存在问题:
首先,如果被删除的部分在继承体系中不止一次声明,那么编译器会被迷惑,所以如果你在一个继承体系中工作,先利用文本查找,检查是否有其他类声明了你正在处理的函数。
第二个问题:编译器可能检查比较慢,影响效率。所以,还是先使用文本查找工具,至少是能够全范围的看到哪里存在引用点。
第三个问题:编译器无法找到通过反射机制得到的引用点。如果系统中使用了反射,那么测试的分量会因此加重。
反射机制:在正式地写代码时并没有用过反射,只在原先学习的时候练习过。简单的说,反射机制能通过字符串形式的类名来获取到类的实例化对象,以及信息。
重构的基本技巧:小步前进、频繁测试。
这些重构手法,其实只是一本菜谱,你在做菜前得先知道,我要做哪道菜,然后,不可能完全地按照菜谱上所写精确地撒盐、配油,更多情况需要自己随机应变。
需要注意的一点是,这些重构方法往往应用于单进程软件,并发和分布式程序设计的重构技术又是截然不同的一套。至于如何去做,那需要自己去思考。
很多重构手法都涉及向系统引入设计模式(如以State/Strategy取代类型码(8.15 Replace Type Code with State/Strategy)用了状态模式或策略模式,塑造模板函数(11.10 Form TemPlate Method)用到了模板模式),我们可以说: 设计模式是理论的终点,而重构则是在路上。