Сопоставление двух агрегатов внутри одной модели DDD .NET Core - PullRequest
0 голосов
/ 04 апреля 2019

Я новичок в теме «Управление через домен» и создал приложение с использованием .NET Core и Angular 7.

У меня есть такой сценарий:

У меня есть слой Domain, в котором есть сущности и агрегаты, и у меня есть два агрегата: Post, Comment

Каждый из них имеет свой собственный репозиторий и свою собственную модель и будет сохранен в базе данных отдельно в двух таблицах на уровне инфраструктуры.

У меня проблема сейчас, когда я хочу показать сообщение в веб-интерфейсе. Я не хочу отправлять два запроса, чтобы получить сообщение, а затем комментарии. Скорее я хочу получить их обоих в одном запросе, что означает, что мои агрегаты должны быть связаны друг с другом, или я должен создать новый агрегат и отобразить обе модели внутри.

Какая лучшая практика для этого? я должен создать новую модель с именем, например, PublicPost и сопоставить оба объекта внутри? и есть ли способ добиться этого динамически с помощью DI и AutoMapper? Спасибо

1 Ответ

1 голос
/ 04 апреля 2019

Кажется, вы просто создаете «совокупность» из каждой сущности. Это не так, как это должно работать. Ваша совокупность - это модель предметной области. Другие связанные объекты имеют доступ и используются только через этот агрегат.

В этом сценарии. Ваш совокупный Post. Comment - это , а не совокупность. Он принадлежит Post и поэтому является частью совокупности Post. Другими словами, в вашей модели Post у вас должны быть такие методы, как: AddComment, UpdateComment, DeleteComment, и вы должны предоставить свойство списка Comments только для чтения, чтобы получить все комментарии.

Даже если бы Comment был агрегатом сам по себе (т. Е. Он мог бы стоять полностью самостоятельно, не будучи связанным с чем-либо еще), тогда вы попадете на территорию ограниченных контекстов. Comment агрегат не был бы тем же самым, что и «комментарий» в контексте Post (даже если они в конечном итоге сводятся к одному и тому же типу сущности. Вам потребуется один домен, где Post - агрегат и Comment управляется через него и является совершенно отдельным доменом, где Comment является агрегатом, совершенно не связанным с Post.

...