Классы, ссылающиеся на себя как совокупные корни - PullRequest
0 голосов
/ 23 января 2019

Самореферентные и иерархические структуры нередки в реальных программных проектах. Можно привести много примеров:

  • Категория товаров
  • Древовидная структура географических регионов
  • и т.д.

Вопрос состоит в том, что в соответствии с принципами доменного управления, можно ли выбрать самоссылающийся класс как Совокупный корень ? Можете ли вы привести пример того, как это может быть реализовано?

1 Ответ

0 голосов
/ 23 января 2019

можно ли выбрать самоссылающийся класс в качестве совокупного корня

Если бы мне пришлось выразить большое иерархическое однородное дерево в качестве совокупного корня, я бы, скорее всего, ввел другой класс (однородныйкроме корневого объекта) для корневого объекта, такого как CategoryRoot 1--* Category 1--* Category, что устраняет необходимость задавать этот вопрос.

Если вы действительно хотите тот же класс (не уверен, целесообразно ли это), тогда вам все равно понадобитсясуществует какой-то протокол, чтобы убедиться, что корневой экземпляр обрабатывается иначе, чем дочерние объекты, хотя они одного класса.Например, вам нужно только разрешить репозиториям возвращать экземпляры верхнего уровня Category (например, parent = null), а вложенные экземпляры Category нельзя делать доступными или ссылаться на них без их корня.

...