我有一个问题,不知道如何解决并行继承。
并行继承的定义
Fowler在[1, 第68页]中定义了并行继承:
并行继承层次结构实际上是散弹手术的一种特殊情况。在这种情况下,每当您创建一个类的子类时,您还必须创建另一个类的子类。您可以通过观察一个继承层次结构中的类名前缀与另一个继承层次结构中的类名前缀相同来识别此气味。
问题
在书中《大型软件项目重构:执行复杂重构,第46页》,作者展示了以下并行继承:接着他用组合方式解决了并行继承问题,并说道:
在许多情况下,可以通过这种方式解决并行继承层次结构的问题,只留下一个继承层次结构,而其他继承层次结构的类则通过使用集成。
解决方案如下:
因此,作者和福勒得出结论:可以通过以下通用策略解决并行继承问题:
消除重复的一般策略是确保一个层次结构的实例引用另一个层次结构的实例。
我看到的问题是类仍然存在,如果我添加一个新类,则必须添加新的“*ListView”类。
但对于这个问题,福勒说:
如果使用Move Method和Move Field,则引用类上的层次结构将消失。
对于当前情况,这意味着我将显示实体的方法移动到实体类中?
那么这会违反MVC原则吗?!
问题
那么如何解决所有并行继承问题,特别是在UI案例中?
来源:
1 马丁·福勒《重构:改善既有代码的设计》