Могут ли операции CRUD выполняться в DDD над агрегированными объектами отдельно от AR?

Допустим, у меня есть сущность Product, у которой есть свойство Brand. Бренд - это сама сущность (а не объект-ценность, поскольку ее необходимо сохранять и поддерживать отдельно).

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

Какая из двух вышеупомянутых сущностей может быть совокупным корнем (если не обеими)? И если один должен быть AR, а другой - зависимым объектом, как я могу выполнить операцию CRUD над ними отдельно от другого?

Как вообще можно смоделировать этот сценарий?


person hajrasoul    schedule 26.04.2020    source источник


Ответы (1)


Назначение агрегированных корней во многом зависит от моделируемой области. Как утверждается в вашем вопросе, «Бренд - это сама сущность», и вы хотите отредактировать его «... на отдельном экране пользовательского интерфейса», а также хотите «... выполнить операцию CRUD изолированно». Это явные намеки на то, что Бренд является совокупным корнем вместе с продуктом.

Бренд - это свойство другого агрегата - продукта. Рекомендуемый способ ссылки на один агрегат из другого - ссылка по идентификатору вместо хранения прямых ссылок (см. Этот ответ по другим причинам ссылки на агрегаты по идентификатору). Таким образом, ваш Продукт может объявлять свой бренд с помощью поля идентификатора бренда, уникального идентификатора, указывающего на соответствующий бренд, что позволяет редактировать продукт и бренд отдельно. В то время как ваш экран редактирования бренда может добавлять новые бренды, редактируйте существующие, получая их с их уникальным идентификатором.

person f.nasim    schedule 27.04.2020
comment
Большое спасибо :) Использование целочисленных идентификаторов или идентификаторов Guid будет простым для сохранения с использованием ORM (Entity Framework Core), но если я объявлю идентификатор как объект значения, как рекомендовано Эвансом, как я могу сохранить его с помощью ORM? Я пытался сопоставить это, но Entity Framework это не нравится. - person hajrasoul; 28.04.2020
comment
Я не являюсь пользователем EF Core. Тем не менее, эта ссылка содержит рекомендации по реализации объектов значений в EF Core. Начиная с EF Core 2.0 рекомендуется принадлежащие типы сущностей. - person f.nasim; 29.04.2020