DDD, Может ли агрегат обрабатывать событие из другого агрегата? - PullRequest
5 голосов
/ 04 августа 2011

Правильно ли обрабатывать событие в агрегате, опубликованном из другого агрегата?Или домен должен обрабатывать только команды?

В моем случае у меня есть приложение, которое управляет настройками.У меня есть агрегат для приложения и агрегат для applicationGroup.Когда я хочу создать параметры для определенной группы приложений, моя команда обрабатывает эту команду, затем applicationGroup публикует событие GroupSettingsCreated, но DDD говорит, что мы можем обработать это событие непосредственно в моем ApplicationAggregate?Или я должен обработать это событие в обработчике событий, сопоставить его с командой, а затем отправить в мой ApplicationAggregate?

Спасибо

Джон

Ответы [ 3 ]

1 голос
/ 05 августа 2011

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

Другими словами, в этом ограниченном контексте , Application должен быть дочерним для ApplicationGroup, а ApplicationGroup.CreateSettings() должен распространять настройки на свои дочерние приложения.Еще один способ думать об этом: «группа приложений» может быть не истинной совокупностью, а скорее удобством, предоставляемым пользовательским интерфейсом.

0 голосов
/ 05 августа 2011

Вы не должны делать это таким образом, потому что это приведет к грязному коду. Вместо этого используйте sagas для оркестровки. Вот также хорошее видео от Андреаса Элунда о сагах в NServiceBus.

0 голосов
/ 04 августа 2011

Джон, я не знаю ничего в DDD, которое бы отвечало на твой вопрос.Это действительно вопрос Event-Driven Architecture (EDA) и Разделение ответственности по запросам команд (CQRS).

Чтобы дать более конкретный совет, я бы хотелзнать, какую роль играют объекты application и applicationGroup.Кстати, они звучат больше как концепции приложений / инфраструктуры, чем концепции доменов.

В общем, я использую команды, в которых следующее действие логически выталкивается из источника (следующее действие является необходимым следующим шагом).Я использую события, когда рассматриваемое действие логически является реакцией на поведение вышестоящего (код вышестоящего не знает об этой реакции на то, что только что произошло).

...