DDD: вопрос о границах агрегатов

У меня сложный сценарий, в котором две совокупные границы как бы противоречат друг другу.

У меня есть 2 сущности: запрос и миссия. Пользователь создает запросы, а позже он может создавать миссии и назначать существующие запросы для миссии.

Запросы и миссии можно создавать независимо. Другими словами, мне не нужно иметь Миссию при создании Запроса и наоборот.

Итак, я предполагаю, что у нас есть 2 разных агрегата: агрегирование запросов и агрегирование миссий, где каждая сущность является корнем своего собственного агрегата.

ОДНАКО, у нас есть инвариант, который нарушает это предположение: вы можете отложить или отменить миссию, что приводит к соответствующему обновлению статуса всех назначенных ей запросов.

Как я могу обеспечить соблюдение этого ограничения, если запрос и миссия находятся в двух разных агрегатах? Если я помещу их в один и тот же агрегат, невозможно будет сказать, кто является агрегатным корнем, потому что каждая сущность может быть создана независимо.

Любой совет?

Mosh


person Mosh    schedule 03.08.2010    source источник


Ответы (2)


Вы уже на правильном пути. Вам не хватает следующего: Агрегаты могут содержать другие агрегаты.

Это нормально для вашего Mission инициировать Status изменения любых Requests, которые он содержит.

person Vijay Patel    schedule 03.08.2010

Я предлагаю использовать шаблон событий. Когда состояние одного Соглашения изменяется, публикуется событие. Это может быть использовано в обработчике, который будет иметь возможность изменять другое состояние агрегатов. Надеюсь, это имеет смысл.

person TheMar    schedule 05.10.2010