В CQRS как работать с NServiceBus для обновления хранилища команд и запросов
В CQRS как убедиться, что обработчик команд обновляет хранилище записи и транзакционно читает хранилище?
Я не уверен, что эти два шага предполагаются как транзакция? Или вы полагаетесь на возможную последовательность здесь? Смысл чтения магазина будет обновляться в конце концов?
Каков (или а) распространенный способ сделать это с помощью NServiceBus 5 или 6?
В нашем приложении мы имеем IRepository<T>
(Добавить, Обновить) для командной стороны для обновления базы данных Sql Server. Сторона запроса проста. База данных и фасад поверх Entity Framework DbContext
,
Шаги на командной стороне будут:
- Контроллер MVC получает данные от View
- Действие контроллера создает объект Command/Message и отправляет его на шину.
- Правильный обработчик команды создает соответствующий объект домена и выполняет проверку на нем.
- Если допустимо, использует IRepository для вставки или обновления базы данных.
- Что теперь?
Должна ли это быть сага в NServiceBus, где шаги 1 и 2 обновляют хранилище команд и читают хранилище?
Спасибо.
1 ответ
Поток, который я вижу, следующий:
- контроллер получает действие и выдает команду в командную шину
- правильный обработчик команд запускается и модели записи обновляются
- в обработчике событий происходит событие
- правильный обработчик событий запускается, а прочитанные модели обновляются
Таким образом, обновление моделей чтения выполняется в обработчике событий - отсюда и возможная согласованность
Надеюсь это поможет! Удачи!