@springimport

Как загружать вложенные сущности в ddd?

Сразу укажу что ddd вроде как не имеет какой-то точной инструкции по реализации. Я реализовываю по-своему, исходя из потребностей.
У меня есть сущности и репозитории к ним. В моем представлении сущность может изменять свои свойства и свойства вложенных сущностей, а так же загружать вложенные сущности, используя их репозитории. Проблема такой загрузки в том что в случае создания списка сущностей, каждая из них должна загрузить свои данные, когда можно было бы 1 запросом загрузить данные сразу для всех. Это подтолкнуло к необходимости сервисов. Планируется что сервис будет иметь метод-команду типа loadOrdersForPaymentPage которая загрузит как сущности, так и вложенности в них, и отдаст уже готовый список.

Пример сервиса.

Цитата Эванса про сервисы.
When a significant process or transformation in the domain is not a natural responsibility of an ENTITY or VALUE OBJECT, add an operation to the model as standalone interface declared as a SERVICE. Define the interface in terms of the language of the model and make sure the operation name is part of the UBIQUITOUS LANGUAGE. Make the SERVICE stateless.


Есть ли минусы такого подхода?
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 1
@ddd329
У меня есть сущности и репозитории к ним.

Репозитоии создаются для сущностей, которые являются корнем агрегации.
В моем представлении сущность может изменять свои свойства и свойства вложенных сущностей, а так же загружать вложенные сущности, используя их репозитории.

Загружать вложенные сущности нельзя, потому как:
1. Сущность не может обращаться к репозиторию, она может иметь только ссылки на другие сущности и на объекты-значения;
2. Грузить надо сразу целый граф безо всякой отложенной загрузки.
Проблема такой загрузки в том что в случае создания списка сущностей, каждая из них должна загрузить свои данные, когда можно было бы 1 запросом загрузить данные сразу для всех.

Вот как раз для этого агрегаты и нужны
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы