Работа с вложенными агрегатами в DDD - PullRequest
14 голосов
/ 05 февраля 2010

Я только начинаю работать с DDD, и у меня возникают проблемы с выяснением того, как приспособить реляционную природу моих данных. У меня есть то, что, как я считаю, будет считаться моим совокупным корнем, но у агрегата также есть собственный агрегат. Не желая нарушать Закон Деметры, мне интересно, не думаю ли я об этом неправильно, и надеюсь, что какой-нибудь эксперт DDD может предложить какое-то понимание.

Мой совокупный корень - это мой Account объект, который имеет совокупность многочисленных AccountElement сущностей, которые сами являются логическими группами отдельных ProductComponent сущностей.

AccountElement вне контекста Account не имеет смысла, поэтому я согласен с моим выводом, что объект Account является моим агрегированным корнем, и я ожидаю, что у сущности, имеющей агрегированный Elements имущество. Это коллекция ProductComponent, которая запутала меня. Этот агрегат не имеет значения вне AccountElement, а на самом деле не имеет значения вне Account.

Не думаю, что мне нужно обращаться к отдельным ProductComponent объектам, расставив точки на них, например:

var reference = account.Elements(0).ProductComponents(0).ReferenceCode;

Но в то же время (с точки зрения предметной области) не имеет смысла обращаться к ProductComponent напрямую из Account сущности.

Я уверен, что все это немного трудно понять, не зная моего домена, но я надеюсь, что этого достаточно, чтобы получить хорошую обратную связь.

1 Ответ

2 голосов
/ 06 февраля 2010

Хорошая статья, на которую ссылается Роберт. Я хотел бы добавить, что если ProductComponent существует только в контексте AccountElement, а AccountElement существует только в контексте Account, то по расширению ProductComponent находится в контексте Account.

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