重构_改善既有代码的设计(五)

一、重构的记录格式安全

    介绍重构时,我采用一种标准格式。每一个重构手法都有以下五个部分。函数

    (1)首先是名称。建造一个重构词汇表,名称是很重要的。这个名称也就是我将在本书其余地方使用的名称。工具

    (2)名称以后是一个简短概要。简单介绍此重构手法的适用情景,以及它所作的事情。这部分能够帮助你更快找到你所须要的重构方法。测试

    (3)动机为你介绍“为何须要这个重构"和"什么状况下不应使用这个重构"。设计

    (4)作法简明扼要地一步一步介绍如何进行此重构对象

    (5)范例以一个十分简单的例子说明此重构手法如何运做。it

    "概要"包括三个部分:1)一句话,介绍这个重构可以帮助解决的问题;2)一段简短陈述,介绍你应该作的事;3)一副速写图,简单展示重构先后示例:有时候我展现代码,有时候我展现UML图。总之,哪一种形式能更好呈现该重构的本质,我就使用哪一种形式。若是你之前见过这一重构手法,那么速写图可以让你迅速了解这一重构的概况;若是你未曾见过这个重构,可能就须要浏览整个范例,才能获得较好的认识。重构

    "作法"出自我本身的笔记。这些笔记是为了让我在一段时间不作某项重构以后还能记得怎么作。它们也颇为简洁,一般不会解释"为何要这么作那么作"。我会在"范例"中给出更多解释。这么一来,"作法"就成了简短的笔记。若是你知道该使用哪一个重构,但记不清具体步骤,能够参考"作法"部分(至少我是这么使用它们的);若是你初次使用某个重构,可能只参考"作法"还不够,你还须要阅读"范例"。软件

    撰写"作法"的时候,我尽可能将重构的每一个步骤都写的简短。我强调安全的重构方式,因此应该采用很是小的步骤,而且在每一个步骤以后进行测试。真正工做时,我一般会采用比这里介绍的"婴儿学步"稍大些的步骤,然而一旦出问题,我就会撤销上一步,换用比较小的步骤。这些步骤还包含一些特定情况的参考,因此它们也有检验表的做用。我本身常常忘掉这些该作的事情。引用

    "范例"像是简单而有趣的教科书。我使用这些范例是为了帮助解释重构的基本要素,最大限度地避免其余枝节,因此我但愿你能原谅其中的简化工做(它们固然不是优秀商用对象涉及的适当例子)。不过我敢确定,你必定能在你手上那些更复杂的状况中使用它们。某些十分简单的重构干脆没有范例,由于我以为为它们加上一个范例不会有多大意义。

    更明确的说,加上范例仅仅是为了阐释当时讨论的重构手法。一般那些代码最终仍有其余问题,但修正那些问题须要用到其余重构手法。某些状况下数个重构常常被一并运用,这时候我会把某些范例拿到另外一个重构中继续使用。大部分的时候,一个范例只为一项重构而设计,这么作是为了让每一项重构手法自成一体,由于这份重构列表的首要目的仍是做为参考工具。

    这些例子不会告诉你如何设计一个employee对象或一个order对象。这些例子的存在纯粹只是为了说明重构,除此以外别无用途。例如你会发现,我在这些例子中用double数据来表示货币金额。我之因此这样作,只是为了让例子简单一些,由于"以什么形式表示金额"对于重构自身并不重要。在真正的商用软件中,我强烈建议你不要以double表示金额。若是真要表示货币金额,我会使用Quantity模式(又接触到一个模式,补上~)

二、寻找引用点

    不少重构都要求你找到对于某个函数、某个字段或某个类的全部引用点。作这件事的时候,记得寻求计算机的帮助。有了计算机的帮助,你能够减小遗漏某个引用点的概率,并且一般比人工查找更快。

    不要盲目的查找-替换。你应该检查每个引用点,肯定它的确指向你想要替换的东西。或许你很擅长运用查找手法,但我老是用心去检查,以确保替换时不出错。要知道,你能够再不一样的类中使用相同函数名称,也能够在同一个类中使用名称相同但签名不一样的函数(好像指的是参数类型、参数个数、参数顺序不一样的函数),因此直接替换出错机会是很高的。


    这一章主要介绍这本书接下来的重构格式,也讲述了很多想法,我以为对于一本技术方面的书而言,若是可以引导读者了解做者的想法,书本的内容也还不错的话,那么这本书离经典也不远了。通过这一章的介绍,接下来的内容,让我很是期待。

相关文章
相关标签/搜索