2015-10-14 3 views
0

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

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

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

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

шагов на стороне команды будут:

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

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

спасибо.

ответ

0

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

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

Поэтому обновление считываемых моделей выполняется в обработчике событий - следовательно, возможная консистенция

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

+0

, но что, если что-то пойдет не так, например. хранилище чтения не может быть обновлено, или хранилище команд не может быть обновлено. Не должны ли обе операции быть в какой-то сделке? Спасибо за вашу помощь. – John

+0

Вот почему это называется возможной консистенцией. Если что-то пошло не так в обработчике событий, который обновил прочитанные данные, вы всегда можете просто отметить, что он поступил не так и повторите выполнение. (Поскольку у вас очень гранулированные обработчики событий, вам не придется делать что-то 2 раза) –

+0

Хорошо. Таким образом, «флаг» означает, что я бы поднять другое событие (например, SyncFailedEvent), которое будет обрабатываться в приложении MVC, например. уведомить пользователя об ошибке? И это также проходит через NServiceBus? – John