Одной из ключевых концепций DDD является совокупный корень - это сущность «верхнего уровня», с помощью которой вы управляете целыми наборами связанных сущностей.
Например, в сценарии розничной торговли «Заказ» будет представлять собой совокупный корень, через который вы можете получить доступ к самому Заказу, списку элементов OrderItem (т. Е. Модификаторов Product + Amount +, таких как скидки), BillingAddress, ShippingAddress и PaymentMethod. Каждый из них тесно связан с самим заказом, до такой степени, что у них нет причин существовать за рамками заказа.
Каждый сводный корень должен иметь репозиторий, который отвечает за сохранение всего подграфа объектов под корнем. Таким образом, в приведенном выше примере вы НЕ хотели бы или нуждались в репозитории для OrderItems, который позволяет независимо получать доступ к элементам заказа; вместо этого вы должны реализовать единый репозиторий OrdersRepository, который обрабатывает Orders и все их подкомпоненты как единое целое.
В зависимости от вашей конкретной доменной модели вам может понадобиться одно или несколько хранилищ, но, конечно, не одно для каждого типа сущности. Ключевой вопрос, который нужно задать при поиске совокупных корней: «Есть ли у этой сущности собственная идентичность и жизненный цикл?» Заказы делают, OrderItems нет.