Подклассы классов с полностью независимыми деревьями наследования, которые не могут быть изменены - PullRequest
0 голосов
/ 25 февраля 2009

Как можно объединить два класса, каждый с независимыми деревьями наследования, чтобы соединить границы контекста, учитывая ограничения, что ни одно дерево наследования класса не может быть изменено для наследования от другого?

То есть, если элемент, который является сущностью, сохранен в базе данных, скажем:

public class Stockitem : StockItemBase {
...
}

должно отображаться с использованием компонента рисования, скажем:

Public class GraphicNode : BaseNode { ... }

Было бы хорошо иметь подкласс stockitemgraphicnode, так как есть много общих членов.

Как лучше всего разработать решение?

Ответы [ 4 ]

2 голосов
/ 25 февраля 2009

Состав.

Создайте новый класс, который наследует ни от одного из них, но содержит экземпляр обоих классов, которые вы хотите использовать в нем, затем откройте методы, которые вы хотите вызвать.

Гугл "Композиция над наследованием" для гораздо лучшего бреда по теме, чем мой

1 голос
/ 25 февраля 2009

Может использоваться множественное наследование, если язык позволяет это. Я не знаю много об этом как бы то ни было.

В противном случае вы можете построить StockItemNode : GraphicNode из StockItem:

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

Вы можете перенести свойства из StockItem в экземпляр StockItemNode (set-get), который полностью разделил бы эти два типа. Или вы можете StockItemNode обернуть экземпляр StockItem (состав).

Если сделать это наоборот (иметь NodeStockItem : StockItem и / или обернуть GraphicNode в StockItem), это приведет к конкретному плохому дизайну, поскольку вы не хотите связывать конкретную презентацию GraphicNode) внутри домена / организации / объекта данных (StockItem).

1 голос
/ 25 февраля 2009

При множественном наследовании это возможно, и если деревья полностью независимы, у вас не будет проблема с бриллиантами .

0 голосов
/ 25 февраля 2009

Вы можете иметь экземпляр объекта GraphicNode внутри StockItem.

Это название Состав: http://en.wikipedia.org/wiki/Object_composition

Затем создайте методы в StockItem, которые просто делегируют реальную работу вложенному GraphicNode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...