В CQRS как работать с NServiceBus для обновления хранилища команд и запросов

В CQRS как убедиться, что обработчик команд обновляет хранилище записи и транзакционно читает хранилище?

Я не уверен, что эти два шага предполагаются как транзакция? Или вы полагаетесь на возможную последовательность здесь? Смысл чтения магазина будет обновляться в конце концов?

Каков (или а) распространенный способ сделать это с помощью NServiceBus 5 или 6?

В нашем приложении мы имеем IRepository<T> (Добавить, Обновить) для командной стороны для обновления базы данных Sql Server. Сторона запроса проста. База данных и фасад поверх Entity Framework DbContext,

Шаги на командной стороне будут:

  1. Контроллер MVC получает данные от View
  2. Действие контроллера создает объект Command/Message и отправляет его на шину.
  3. Правильный обработчик команды создает соответствующий объект домена и выполняет проверку на нем.
  4. Если допустимо, использует IRepository для вставки или обновления базы данных.
  5. Что теперь?

Должна ли это быть сага в NServiceBus, где шаги 1 и 2 обновляют хранилище команд и читают хранилище?

Спасибо.

1 ответ

Поток, который я вижу, следующий:

  • контроллер получает действие и выдает команду в командную шину
  • правильный обработчик команд запускается и модели записи обновляются
  • в обработчике событий происходит событие
  • правильный обработчик событий запускается, а прочитанные модели обновляются

Таким образом, обновление моделей чтения выполняется в обработчике событий - отсюда и возможная согласованность

Надеюсь это поможет! Удачи!

Другие вопросы по тегам