坏味道——平行继承体系(Parallel Inheritance Hierarchies)
平行继承体系(Parallel Inheritance Hierarchies)
其实是霰弹式修改(Shotgun Surgery)
的特殊情况。
特征
每当你为某个类添加一个子类,必须同时为另一个类相应添加一个子类。这种情况的典型特征是:某个继承体系的类名前缀或类名后缀完全相同。
问题原因
起初的继承体系很小,随着不断添加新类,继承体系越来越大,也越来越难修改。
解决方法
- 一般策略是:让一个继承体系的实例引用另一个继承体系的实例。如果再接再厉运用
搬移函数(Move Method)
和搬移字段(Move Field)
,就可以消除引用端的继承体系。
收益
- 更好的代码组织
- 减少重复代码
何时忽略
- 有时具有并行类层次结构只是一种为了避免程序体系结构更混乱的方法。如果你发现尝试消除平行继承体系导致代码更加丑陋,那么你应该回滚你的修改。
重构方法说明
搬移函数(Move Method)
问题
你的程序中,有个函数与其所驻类之外的另一个类进行更多交流:调用后者,或被后者调用。
解决
在该函数最常引用的类中建立一个有着类似行为的新函数。将旧函数变成一个单纯的委托函数,或是旧函数完全移除。
搬移字段(Move Field)
问题
在你的程序中,某个字段被其所驻类之外的另一个类更多地用到。
解决
在目标类新建一个字段,修改源字段的所有用户,令他们改用新字段。
引申阅读
欢迎继续阅读 代码的症与药 系列文章。
还没有评论呢,快来抢沙发~