По-моему, это одна из тех грязных вещей, которые появляются в DDD.
В коде я рассматриваю агрегатный корень как контейнер для любых «отношений», которые у него есть, и любых объектов сущностей, которые не могут существовать без агрегатного корня.
Например, давайте возьмем пример Customer-> Order-> LineItem-> Product, который к настоящему времени забит до смерти. Совокупный корень, как я показал, является клиентом в этом сценарии. Тем не менее, вы не всегда хотите получить заказ через клиента. Возможно, вы захотите найти заказы на конкретную дату.
Если перевернуть его на бок, у вас также не будет клиента, у которого нет заказа. Эти два находятся в несколько симбиотических отношениях, поэтому один не является совокупным корнем другого.
Дело в том, что вам не нужно загружать клиента через заказ, но вы не обязательно хотите загружать заказ через клиента.
Однако, начиная с Order, маловероятно, что вы захотите просто получить LineItem, и вы, конечно, не собираетесь создавать их без заказа. С этой целью Орден служит шлюзом для LineItems. LineItems не понадобится их собственный контроллер или хранилище. Они существуют только в самом Ордене и, как таковые, являются частью Ордена (в этом случае Орден становится совокупным корнем) и управляются Субъектом Ордена.
Но LineItem, скорее всего, будет иметь отношение к продукту в системе. Продукты будут иметь свои собственные контроллеры, репозитории и т. Д., Потому что они могут существовать вне Агрегированного корня.
Подводя итог моему бродяжничеству, я склонен смотреть на это так: если сущность может существовать сама по себе, у нее должен быть контроллер. Объекты, которые не могут существовать сами по себе (в данном случае LineItems), должны управляться только своим контейнером (совокупным корнем).
Может, какой-нибудь пурист DDD поправит меня, если / где я не прав?
Что касается второй части вашего вопроса, мне понадобятся некоторые подробности о том, как вы представляете работу этих других сущностей. С учетом того, что вы здесь разместили, я думаю, что PackagingOptions связаны с продуктом и будут частью объединенного корня продукта. Теперь, подразумевая, что вы редактируете их, напрашивается вопрос, является ли это справочной таблицей в системе, или они являются одноразовыми значениями и, как таковые, должны рассматриваться как объекты-значения?