Работа с вложенными агрегатами в DDD
-
18-09-2019 - |
Вопрос
Я только начинаю работать с DDD, и мне трудно понять, как учесть реляционную природу моих данных.У меня есть то, что, по моему мнению, можно было бы считать моим совокупным корнем, но у агрегата также есть свой собственный агрегат.Не желая нарушать Закон Деметры, я задаюсь вопросом, думаю ли я об этом неправильно, и надеюсь, что какой-нибудь эксперт DDD сможет предложить некоторую информацию.
Мой совокупный корень — это мой Account
объект, имеющий совокупность множества AccountElement
сущности, которые сами по себе являются логическими группами отдельных ProductComponent
сущности.
Ан AccountElement
вне контекста Account
не имеет никакого значения, поэтому меня устраивает мой вывод, что Account
объект является моим совокупным корнем, и я ожидаю, что у этой сущности есть совокупный Elements
свойство.Это ProductComponent
Коллекция, которая меня смутила.Эта совокупность не имеет смысла вне AccountElement
, и Действительно не имеет никакого значения вне Account
.
Я не думаю, что мне следует иметь доступ к индивидуальному ProductComponent
объекты, расставляя точки над ними, например:
var reference = account.Elements(0).ProductComponents(0).ReferenceCode;
Но в то же время не имеет смысла (с точки зрения предметной области) получать доступ к ProductComponent
прямо из Account
сущность.
Я уверен, что все это немного сложно понять без знания моей предметной области, но я надеюсь, что этого достаточно, чтобы получить хорошие отзывы.
Решение
Статья, на которую ссылается Роберт, хорошая.Я бы добавил, что если ProductComponent существует только в контексте AccountElement, а AccountElement существует только в контексте Account, то по расширению ProductComponent находится в контексте Account.