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