Работа с вложенными агрегатами в 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 находится в контексте учетной записи.