《重构 改善既有代码的设计》 读书笔记(十七)

5.1 重构的记录形式

之后的所有章节中,重构方法的介绍都遵循以下标准格式:

序号步骤内容
1名称建造一个重构词汇表,名称很重要,这个名称将会被用在此书任何地方。
2简短概要简单介绍这种重构方法的使用场景,以及它所做的事情。这能让你更快地找到所需的重构方法。
3动机为什么需要这种重构方法,什么情况应该使用这个,什么时候不应该使用
4做法简明扼要地一步一步介绍如何进行此重构
5范例一个简单的例子,说明这种重构方法的过程
  • 概要内容:包括三个部分。
  1. 一句话,介绍这个重构能够帮助解决的问题。

  2. 一段简短陈述,介绍你应该做的事。

  3. 一幅速写图,简单展现重构前后示例:有时展示代码,有时展示UML图。哪种更好呈现该重构的本质就用哪种。

  • 做法:详细的步骤,可以结合范例来看。如果事后想要复习这种重构方法,可以参考这一部分,会让你记起来应该如何去使用。

  • 范例:一个简单的教科书。

这本书即将完成的时候,Java2已经正式发布。
也就是说,这本书的确很老,所以里面有些例子仅供参考,主要是学习重构如何进行,而不是学如何敲代码。

5.2 寻找引用点

很多重构都会要求找到某个方法、某个字段或某个类的所有引用点,此时,记得借助搜索工具。

需要注意的是,在文本查找时,不要直接一次性全部替换,因为可能会出错。

现在主流的JavaIDE(如eclipse和idea)都能相当准确的找到程序元素的引用点,但如果使用Java之外的语言,这节内容的技巧还是要有的。

在强类型语言中,往往可以直接删除旧部分,然后让编译器去寻找编译报错的地方,可惜这样的技巧存在问题:

首先,如果被删除的部分在继承体系中不止一次声明,那么编译器会被迷惑,所以如果你在一个继承体系中工作,先利用文本查找,检查是否有其他类声明了你正在处理的函数。

第二个问题:编译器可能检查比较慢,影响效率。所以,还是先使用文本查找工具,至少是能够全范围的看到哪里存在引用点。

第三个问题:编译器无法找到通过反射机制得到的引用点。如果系统中使用了反射,那么测试的分量会因此加重。

反射机制:在正式地写代码时并没有用过反射,只在原先学习的时候练习过。简单的说,反射机制能通过字符串形式的类名来获取到类的实例化对象,以及信息。

5.3 这些重构手法有多成熟

重构的基本技巧:小步前进、频繁测试。

这些重构手法,其实只是一本菜谱,你在做菜前得先知道,我要做哪道菜,然后,不可能完全地按照菜谱上所写精确地撒盐、配油,更多情况需要自己随机应变。

需要注意的一点是,这些重构方法往往应用于单进程软件,并发和分布式程序设计的重构技术又是截然不同的一套。至于如何去做,那需要自己去思考。

很多重构手法都涉及向系统引入设计模式(如以State/Strategy取代类型码(8.15 Replace Type Code with State/Strategy)用了状态模式或策略模式,塑造模板函数(11.10 Form TemPlate Method)用到了模板模式),我们可以说:
设计模式是理论的终点,而重构则是在路上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NewReErWen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值