При реализации событий домена, если обработчики событий будут использоваться только для проблем с чисто доменными именами; что вы обсудите с бизнес-специалистами, или они открыты для использования тем, что заинтересовано в модели домена?Обработчики событий домена. Должны ли они использоваться для проблем приложений?
Это, скорее всего, лучше всего объясняется простым примером, рассмотрите приложение «Календарь» для планирования работы сотрудников.
Мы могли бы иметь следующие события домена ...
AppointmentAdded AppointmentRemoved AppointmentContentChanged AppointmentMoved
У нас есть обработчики этих событий, например, когда назначение перемещается в то время за пределами сотрудников мы установили предупреждающий флаг.
Есть, конечно, проблемы с приложениями, которые заинтересованы в этих событиях, например. когда в календарь добавляется Назначение, мы должны добавить его в Единицу работы, чтобы позднее мы могли зафиксировать изменения.
Должны ли эти приложения быть потребителями событий домена, или же мы должны поднимать и обрабатывать отдельные системные события вместо этого?
Я сомневаюсь, что они способствуют обработке событий в той же транзакции, что и агрегат, который запускает это событие. Насколько я помню, Udi указывает, что лучше «загорать и забывать» outsite агрегированную транзакцию, особенно в тех случаях, когда обработчики событий не имеют никакого отношения к домену (например, сообщения электронной почты). Чтобы «стрелять и забывать» означает, что вас не волнует, получил ли слушатель сообщение, но вы должны заботиться о том, когда нужно отправить сообщение (отправьте сообщение). Вы отправляете сообщение после того, как агрегат завершил работу: state change + persistence. Поэтому я стараюсь уволить событие после настойчивости. – Tudor
P.S. Событие может быть запущено агрегированием в любое время, но фактическая доставка сообщения должна обрабатываться после сохранения совокупности (или после завершения определенной команды, которая вызвала событие). – Tudor