发散式变化(Divergent Change)
发散式变化(Divergent Change)类似于霰弹式修改(Shotgun Surgery),但实际上完全不同。发散式变化(Divergent Change)在一个类中修改多处。霰弹式修改(Shotgun Surgery)指的是同时对多个类进行单一的修改。
特征
你发现你想要修改一个函数,却必须要同时修改许多不相关的函数。例如,当你想要添加一个新的产品类型时,你需要同步修改对产品进行查找、显示、排序的函数。
问题原因
通常,这种发散式修改是由于编程结构不合理或者“复制-粘贴式编程”。
解决办法
- 运用
提炼类(Extract Class)拆分类的行为。 - 如果不同的类有相同的行为,你可以考虑通过继承来合并类(
提炼超类(Extract Superclass)和提炼子类(Extract Subclass))。
收益
- 提高代码组织结构
- 减少重复代码
重构方法说明
提炼类(Extract Class)
问题
某个类做了不止一件事。
解决
建立一个新类,将相关的字段和函数从旧类搬移到新类。
提炼超类(Extract Superclass)
问题
两个类有相似特性。
解决
为这两个类建立一个超类,将相同特性移至超类。
提炼子类(Extract Subclass)
问题
一个类中有些特性仅用于特定场景。
解决
创建一个子类,并将用于特殊场景的特性置入其中。
浙公网安备 33010602011771号