如果可以修改类的继承树以便从另一个继承树的限制,有人会如何加入两个具有独立继承树的类来桥接上下文边界?
即,如果一个项目是保存到数据库的实体,那么就说:
public class Stockitem : StockItemBase {
...
}
需要使用绘图组件显示,例如:
Public class GraphicNode : BaseNode { ... }
由于有许多共同的成员,因此只需要一个子类stockitemgraphicnode
会很高兴。
设计解决方案的最佳方法是什么?
答案 0 :(得分:2)
组合物。
创建一个新类,该类既不继承,也包含要在其中使用的类的实例,然后公开要调用的方法。
谷歌“超越遗传的构成”对于这个主题的反应比我的好多了
答案 1 :(得分:1)
使用多重继承是可能的,如果树完全独立,则不会有the diamond problem。
答案 2 :(得分:1)
如果语言允许,可以使用多重继承。但是我不太了解它。
否则,您可以从StockItemNode : GraphicNode
:
StockItem
class ItemNodeFactory
{
...
StockItemNode create(StockItem);
...
}
您可以将属性从StockItem
转移到StockItemNode
(set-get)的实例中,这将完全解耦这两种类型。或者您可以StockItemNode
包装StockItem
(组合)的实例。
反过来(在NodeStockItem : StockItem
中使用GraphicNode
和/或包裹StockItem
)会导致特别糟糕的设计,因为您不想硬连线耦合到域/业务/数据实体(GraphicNode
)内的特定表示(StockItem
)。
答案 3 :(得分:0)
您可能在StockItem中有一个GraphicNode对象的实例。
这个名为Composition http://en.wikipedia.org/wiki/Object_composition
然后在StockItem中创建方法,只需delegate实际工作到封闭的GraphicNode。