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