DDD: Совокупные корни

Мне нужна помощь в поиске моего совокупного корня и границы.

У меня есть 3 объекта: Plan, PlannedRole и PlannedTraining. Каждый план может включать в себя много плановых ролей и плановых тренировок.

Решение 1: Сначала я думал, что Plan является совокупным корнем, потому что PlannedRole и PlannedTraining не имеют смысла вне контекста плана. Они всегда в рамках плана. Кроме того, у нас есть бизнес-правило, которое гласит, что в каждом плане может быть максимум 3 плановых роли и 5 плановых тренировок. Поэтому я подумал, что, назначив План в качестве совокупного корня, я смогу применить этот инвариант.

Однако у нас есть страница поиска, где пользователь ищет планы. Результаты показывают несколько свойств самого Плана (и ни одного из его PlannedRoles или PlannedTrainings). Я подумал, что если мне придется загружать весь агрегат, это будет иметь много накладных расходов. Есть около 3000 планов, и у каждого может быть несколько детей. Загрузка всех этих объектов вместе, а затем игнорирование PlannedRoles и PlannedTrainings на странице поиска не имеет смысла для меня.

Решение 2: Я только что понял, что пользователю нужны еще 2 страницы поиска, где они могут искать запланированные роли или запланированные тренинги. Это заставило меня понять, что они пытаются получить доступ к этим объектам независимо и «вне» контекста Плана. Поэтому я подумал, что был неправ в своем первоначальном дизайне, и именно так я придумал это решение. Итак, я подумал, что здесь будет 3 совокупности, по 1 на каждую сущность.

Этот подход позволяет мне искать каждую сущность независимо, а также решает проблему производительности в решении 1. Однако, используя этот подход, я не могу применить инвариант, который я упоминал ранее.

Существует также другой инвариант, в котором говорится, что план может быть изменен, только если он имеет определенный статус. Поэтому я не смогу добавить какие-либо PlannedRoles или PlannedTrainings в план, который не находится в этом статусе. Опять же, я не могу применить этот инвариант при втором подходе.

Любой совет будет принята с благодарностью.

Ура, мош

Ответы на вопрос(3)

Ваш ответ на вопрос