CQRS включил меня в режим мышления. Я пытаюсь начать новый проект с идеями CQRS. Главное, что мне нравится, -
1) разделение запросов и команды. Проблемы с доменом были проблемой.
2) Использование хранилища событий для аудита - я не буду использовать его для воспроизведения - по крайней мере, не сейчас.
Я хорошо разбираюсь в стороне запроса, и у меня все еще есть некоторые вопросы о событиях домена
Если команда приводит к обновлению корней многоагрегатов (пример заказа и OrderDetail), я буду иметь их в рамках UnitofWork (транзакционный). Теперь каждый домен отвечает за публикацию событий, когда изменение происходит в его состоянии.
скажем, команда изменяет 3 записи OrderDetail. Каждый OrderDetail опубликует 2 события. В итоге мы имеем 6 событий.
a) Если я публикую события, как только я внес изменения в объект домена (но не совершил транзакцию), как я могу отменить опубликованные события (и, возможно, они были использованы подписчиками)
- Я могу представить, что события должны быть опубликованы в списке "под одной и той же единицей объема работ" и после того, как был вызван committ на транзакции, сохраните его и опубликуйте. Звучит ли это что-то, что можно было бы сделать.
b) Если изменения в OrderDetail требуют, чтобы некоторые изменения также имели место в Order Aggregate Root, то
i) Должен ли я основывать эти изменения, обрабатывая события, опубликованные с помощью OrderDetail Aggregate? Напр. скажем, две детали заказа были удалены. Это делает статус заказа от "предпочтительного" до "Не предпочтительным". ii) Что делать, если ошибки события и не обновляют состояние заказа. Если заказ остается предпочтительным, он отправляется через 2 дня.
Добавление другого вопроса
c) Являются ли "события домена источником всех изменений состояния приложения" или являются ли они "результатом всех изменений состояния приложения"
Спасибо, Advance,
The Mar