Я немного запутался в потоке в системе с использованием событий домена для создания модели чтения. В частности, как мы имеем дело с тем, что пользователь ожидает, что данные (и его представление) будут изменены, когда они завершат команду, но из-за нашей архитектуры системы (неблокирующие вызовы для публикации событий) фактическая база данных может не измениться до страница перезагружается?Отображение изменений в представлении при использовании CQRS и DDD с доменными событиями & ServiceBus
Я надеюсь переместить дизайн одной из наших систем в ряд с CQRS, используя события и служебную шину.
Скажем, мой поток идет, как, например:
Пользователь кнопку защелкивается View для выполнения задачи удаления Способ оплаты с их счета.
Контрольные вызовы PaymentMethodRemovalService, передача его accountId & paymentMethodId.
Контроллер использует AccountRepository для получения учетной записи и вызывает account.RemovePaymentMethod (ID)
Счета подтверждает, что операция может произойти событие и публикует PaymentMethodRemovedMessage (AccountId, PaymentMethodID)
Поскольку издательство события является асинхронным, мы теперь должны вернуться из служебного и обратного просмотра с контроллера - , но наши фактические данные еще не обновлены!
Обработчик, IHandle < PaymentMethodRemovedMessage>, слышит событие и удаляет фактическую строку из БД
Итак, что парень делать?
Я могу просто, скажем, удалить div, который показывал способ оплаты. Это может работать в сценарии AJAX, но что, если я использую Post-Redirect-Get для поддержки клиентов без JavaScript. Затем я буду увольнять мой Get и читать данные со стороны Query вещей, возможно, прежде чем он будет обновлен.
Я просто показываю уведомление о том, что их запрос на удаление способа оплаты был отправлен? (который, кажется, не дружелюбен, имеет смысл для подачи заказа, но не для, скажем, изменения адреса).
Есть ли способ согласовать реализацию изменений как развязанных асинхронных событий и показ пользовательских данных, отражающих их текущее изменение?
EDIT: Мой вопрос очень похож на CQRS, DDD synching reporting database я должен сказать, что ответ дается там и также упоминается здесь, имеет немного запах к нему - пререканиям интерфейса, чтобы показать обновление, которое находится вне диапазона с прочитанный БД, так сказать. Я надеялся на что-то немного чище.