Как определить совокупное отношение один-ко-многим - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть два агрегата Blog и Post с отношением один-ко-многим (Blog относится к нескольким Post). В соответствии с лучшими практиками проектирования на основе доменов, я не уверен, что Blog должен содержать коллекцию Post ссылок:

public class Blog : Entity<BlogId>, IAggregateRoot
{
    IEnumerable<Post> posts;
}

, когда Post также имеет косвенную ссылку на идентификатор через BlogId:

public class Post : Entity<PostId>, IAggregateRoot
{
    BlogId BlogId;
}

Если для ответа на вопрос требуется больше контекста, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2019

В книге Вона Вернона «Внедрение доменного дизайна» вы можете найти целую главу о том, как определить агрегаты, и некоторые практические правила, которые вы можете применить.

Одним из них является попыткаДержите ваши агрегаты как можно меньше. В вашем случае я бы предпочел избегать наличия списка объектов Post внутри вашего объекта Blog. Представьте, что ваш объект Blog имеет атрибут name, и вы просто хотите изменить его: когда вы извлечете этот объект из базы данных, если он будет содержать все сообщения, вы также получите их, создав ненужное соединение для использования. Если вы работаете, и это снизит производительность.

С точки зрения дизайна, вероятно, что Блог не определен в его Посте, так что на самом деле они вам не нужны. Агрегат должен нести ответственность за все свои инвариантные правила (правила бизнес-логики) и не более.

Мой совет - просто сохранять его как можно более простым и всегда сосредотачиваться на твердых принципах.

Удачи!

0 голосов
/ 03 ноября 2019

DDD не говорит вам, как реализовать ваше приложение, но дает вам только рекомендации. Удержание списка «постов» в классе «блога» и логическая обратная ссылка определенно хорошо, если вы не можете сделать что-то еще, но самое важное, что нужно понять, это то, как «пользователь блога» сможет воздействовать на посты.

Таким образом, не стесняйтесь вносить изменения в модель домена наиболее удобным для вас способом, но единственный способ добавлять сообщения, удалять сообщения и т. Д. Будет через команды, отправляемые сущности «блог», так что это будетсам блог, чтобы сообщить вам, что сообщения правильно составлены в соответствии с вашей реализацией

...