0

考虑到任何一个类的继承树都不能修改为从另一个继承的限制,有人如何将两个具有独立继承树的类连接起来以桥接上下文边界?

即,如果作为实体的项目保存到数据库中,假设:

public class Stockitem : StockItemBase {
...
}

需要使用绘图组件显示,比方说:

Public class GraphicNode : BaseNode { ... }

简单地有一个子类会很好,stockitemgraphicnode因为有很多常见的成员。

设计解决方案的最佳方法是什么?

4

4 回答 4

2

作品。

创建一个新类,该类既不继承自其中,又具有要在其中使用的两个类的实例,然后公开要调用的方法。

谷歌“Composition over Inheritence”在这个主题上比我的要好得多

于 2009-02-25T10:15:46.307 回答
1

使用多重继承是可能的,如果树是完全独立的,你就不会有菱形问题

于 2009-02-25T10:14:34.530 回答
1

如果语言允许,可以使用多重继承。不过我对此了解不多。

StockItemNode : GraphicNode否则,您可以从 a构建a StockItem

class ItemNodeFactory
{
  ...
  StockItemNode create(StockItem);
  ...
}

您可以将属性从(set-get)StockItem的实例中传输StockItemNode,这将完全分离这两种类型。或者你可以包装一个(组合)StockItemNode的实例。StockItem

反过来做(在a 中包含NodeStockItem : StockItem和/或包装 a GraphicNodeStockItem会导致特别糟糕的设计,因为您不想将耦合硬连接到GraphicNode域/业务/数据实体 ( ) 中的特定表示 ( StockItem)。

于 2009-02-25T10:47:19.600 回答
0

您可能在 StockItem 中有一个 GraphicNode 对象的实例。

这个命名组合:http ://en.wikipedia.org/wiki/Object_composition

然后在 StockItem 中创建方法,这些方法将简单地将实际工作委托给封闭的 GraphicNode。

于 2009-02-25T10:14:42.033 回答