Отношения между хранилищами для Aggragates в DDD - PullRequest
1 голос
/ 25 сентября 2019

Я строю репозиторий для Aggragate.У нас есть 3 разных объекта, из которых он построен, один из них - root.

Данные для всех 3 сохраняются в базе данных SQL.У каждого свой стол.

Давайте рассмотрим простой случай получения полного списка этих агрегатов.Мне нужно получить данные из всех 3 таблиц.Должен ли я создать один оптимизированный запрос для извлечения этого набора данных или, вернее, инкапсулировать логику для каждого объекта в своем собственном репозитории и собрать его репозиторий Aggragate?(Совокупное репо будет затем вызывать соответствующие репо и собирать его)

Я склоняюсь к первому решению, однако это более сильное соединение.Последнее кажется более приятным с точки зрения ООП, но, кажется, слишком сложным и потенциально может вызвать проблемы с аннулированием кэша для последующих наборов данных и т. Д.

1 Ответ

1 голос
/ 25 сентября 2019

Для каждого типа объекта, требующего глобального доступа, создайте объект, который обеспечивает иллюзию всех объектов этого типа, хранящихся в памяти.Настройте доступ через глобальный интерфейс.[..] Определите методы для добавления и удаления объектов.[..] Определить репозитории только для агрегатов. ~ Эванс, о репозиториях

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

Я склоняюсь к первому решению, однако это более сильное соединение.

Ответитьчто, пожалуйста, взгляните на Определение совокупности от Мартина Фаулера :

Совокупность - это шаблон в доменно-управляемом дизайне.Агрегат DDD - это кластер доменных объектов, которые могут рассматриваться как единое целое .Примером может быть заказ и его отдельные позиции, это будут отдельные объекты, но полезно рассматривать заказ (вместе с его отдельными позициями) как один агрегат.

Агрегат - это соединение сущностейчто оно построено из по определению .

...