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