您的位置:首页 > 编程语言

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

2014-05-05 17:03 309 查看
1、重构的记录格式

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

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

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

(3)动机为你介绍“为什么需要这个重构"和"什么情况下不该使用这个重构"。

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

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

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

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

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

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

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

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

2、寻找引用点

很多重构都要求你找到对于某个函数、某个字段或某个类的所有引用点。做这件事的时候,记得寻求计算机的帮助。有了计算机的帮助,你可以减少遗漏某个引用点的几率,而且通常比人工查找更快。

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

这一章主要介绍这本书接下来的重构格式,也讲述了不少想法,我觉得对于一本技术方面的书而言,如果能够引导读者了解作者的想法,书本的内容也还不错的话,那么这本书离经典也不远了。经过这一章的介绍,接下来的内容,让我非常期待。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: