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