DDD — объединение корней в очень простой модели блога

В качестве упражнения я пытаюсь создать простое приложение для блога в .NET, используя DDD. Пока у меня есть классы User, Topic и Comment. Но проблема в том, как связать комментарий с пользователем и темой? Если я скажу, что Пользователь и Тема являются агрегированными корнями, то при чем тут Комментарий?


person Alan Fox    schedule 10.12.2010    source источник
comment
Этот вопрос никогда бы не возник, если бы вы следовали теории DDD. Сначала проведите мозговой штурм и нарисуйте возможные сценарии, затем кодируйте. Например, тему можно рассматривать как первый комментарий в серии из них, поэтому между ними нет большой разницы, за исключением дополнений, которые есть у темы (заголовок, теги и т. д.).   -  person yoda    schedule 10.12.2010
comment
Ну, я полный нуб в DDD и архитектуре программного обеспечения в целом. Но из того, что я слышал, следует избегать обобщений, то есть, если пользователи думают, что тема отличается от комментария, я не должен моделировать ее как комментарий. Я пытаюсь провести мозговой штурм своей модели прямо сейчас...   -  person Alan Fox    schedule 11.12.2010


Ответы (1)


Агрегаты могут иметь ассоциации с другими корнями агрегатов.

например комментарий может быть связан как с темой, так и с пользователем. В любом случае, я бы смоделировал это так: совокупные корни - это границы согласованности. Тема не обязательно должна каким-либо образом согласовываться с ее комментариями, поэтому комментарии не обязательно должны быть частью этой совокупности. Пользователю не нужно быть последовательным во всех своих комментариях, поэтому пользователям также не нужно знать о комментариях.

Я бы получил комментарии для конкретной темы из репозитория комментариев. например

var comments = commentRepo.FindCommentsForTopic(someTopic); 
//or by topic id for pragmatic reasons.
person Roger Johansson    schedule 12.12.2010