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