Работа с вложенными агрегатами в DDD

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

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

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

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

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

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

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

Ответы

Ответ 1

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