В нашем приложении мы вызываем события домена, когда что-то изменяется в модели домена. Некоторые задачи, которые выполняются обработчиками событий, должны выполняться в рамках той же транзакции, которая использовалась при возникновении события, другие задачи должны выполняться вне этой транзакции.
Например,
Когда строка заказа является добавлен в сущность Order, возникает событие домена OrderLineAdded, одно событие предметной области изменяет состояние модели предметной области (поэтому оно должно выполняться в одной транзакции), затем, когда транзакция завершена, пользовательский интерфейс должен быть обновлен.
Как бы вы подойти к этой проблеме?
Вариант 1 кажется сбивающим с толку, поскольку имена событий должны каким-то образом указывать, что они находятся в транзакции или вне ее, но с вариантом 2 обработчики доменного события всегда должны предполагать, что они вызываются синхронно из транзакции.
Возможно, есть лучший подход?