- 含义:
牵一发而动全身,每次遇到某种变化,都必须在不同的类中做出小修改 - 坏处:
代码散步各处,不利于扩展和阅读,增加代码修改难度及工作量 - 目标:
尽量使某类变化通过某个特定类来处理,避免修改过多类。提升代码可扩展性,减少不必要的工作量。 - 实现方法:
- 考虑使用Move Method(搬移函数) 和Move Field(搬移字段) 把所有需要修改的代码放进同一个类。如果没有合适的类,就新建一个,考虑使用Inline Class(将类内联) 把一系列相关行为放进同一个类,这有可能造成Divergent Change(上篇讲到过)。
- 此种情况与上篇所述的Divergent Change情况正好相反。
本文涉及的重构方法
Inline Class (将类内联化)
- 作用:
把某个做很少事且未来扩展可能性较为低的类合并到另一个类中。清除不必要的类,提升代码质量。 - 步骤:
- 利用Move Method(搬移函数) 和 Move Field(搬移字段) 把源类搬到需要搬到的目标类中
- 修改原来类内的引用,调整函数及变量的作用域
- 编译,测试。
- 重构思路:
把不必要的,做的事过少,并且未来扩展的可能性也较小的类合并到另一个经常引用,或者抽象概念上,可以分为一类的类中。 - 建议:
使用前考虑此类未来是否可能进行扩展,咨询同事等确认,以免无效劳动。
Move Field (搬移字段) 与Move Method(搬移函数)
- 重构思路:
- 搬移字段:
- 类中的某个字段比起自己类里,在另一个类中的使用频率更高,把此字段搬移到那个类中。使用此方法也需注意各个类的职责,并评估未来变化。
- 搬移函数
- 类中的某个函数比起自己类里,在另一个类中的使用频率更高,把此函数搬移到那个类中。使用此方法也需注意各个类的职责,并评估未来变化。
- 搬移字段: