发散式变化(Divergent Change)

发散式变化(Divergent Change) 类似于 霰弹式修改(Shotgun Surgery) ,但实际上完全不同。发散式变化(Divergent Change) 在一个类中修改多处。霰弹式修改(Shotgun Surgery)指的是同时对多个类进行单一的修改。

特征

你发现你想要修改一个函数,却必须要同时修改许多不相关的函数。例如,当你想要添加一个新的产品类型时,你需要同步修改对产品进行查找、显示、排序的函数。

 

问题原因

通常,这种发散式修改是由于编程结构不合理或者“复制-粘贴式编程”。

解决办法

  • 运用 提炼类(Extract Class) 拆分类的行为。
  • 如果不同的类有相同的行为,你可以考虑通过继承来合并类(提炼超类(Extract Superclass) 和 提炼子类(Extract Subclass))。

收益

  • 提高代码组织结构
  • 减少重复代码

重构方法说明

提炼类(Extract Class)

问题

某个类做了不止一件事。

 

解决

建立一个新类,将相关的字段和函数从旧类搬移到新类。

 

提炼超类(Extract Superclass)

问题

两个类有相似特性。

 

解决

为这两个类建立一个超类,将相同特性移至超类。

 

提炼子类(Extract Subclass)

问题

一个类中有些特性仅用于特定场景。

 

解决

创建一个子类,并将用于特殊场景的特性置入其中。

 

posted on 2018-02-06 14:32  Sharpest  阅读(3300)  评论(0)    收藏  举报