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