1 发散式变化(Divergent Change)
指一个类受多种变化的影响。
如果某个类经常因为不同原因在不同的方向上发生变化,Divergent Change(发散式变化)
就出现了。
针对某一外界变化的所有相应修改,都只应该发生在单一类,而这个类内的所有内容都应该反应次变化。为此,你应该找出某特定原因而造成的所有变化,然后运营Extract Class(提炼类)
将他们提炼到一个类中。
2 霰弹式修改(Shotgun Surgery)
指一种变化引发多个类相应修改。
如果每遇到一种变化,你都必须在许多不同的类内做出许多小修改,你所面临的坏味道就是Shotgun Surgery(霰弹式修改)
。
可以使用Move Method(搬移函数)
和Move Field(搬移字段)
把所有需要修改的代码放进同一个类,如果没有合适的类,则创建一个。可以使用Inline Class(将类内联化)
把一系列相关行为放进同一个类里面。这可能会造成少量的Divergent Change(发散式变化)
,但很容易处理掉。
3 平行继承体系(Parallel Inheritance Hierarchies)
Parallel Inheritance Hierarchies(平行继承体系)
是Shotgun Surgery(霰弹式修改)
的特殊情况:每当你为某个类增加一个子类的时候,必须也为另一个类增加相应的子类,如果你发现某一个继承提醒的类前缀和另一个继承体系的类名称前缀完全相同,便是闻到了这种坏味道。
消除策略:让一个继承体系的实例引用另一个继承体系的实例。进一步的,运用Move Method(搬移函数)
和Move Field(搬移字段)
将引用端继承体系消弥于无形。