CQRS - возможная последовательность - PullRequest
6 голосов
/ 05 августа 2010

У меня есть следующий сценарий, который мне нужно реализовать по шаблону CQRS:

  1. пользователь входит в систему
  2. пользователь вводит некоторые страховые реквизиты
  3. пользователь просит применить решение
  4. пользователь просматривает результат решения

Это кажется довольно простым, однако моя проблема между этапами 3 и 4, на шаге 3 я отправляю команду ApplyForDecision, которая получит решение от службы андеррайтинга, затем событие с результатом этого решения будет отправлено шина для хранилища для чтения, чтобы позже использовать его и обновить таблицы представлений с результатом решения.

Проблема в пользовательском интерфейсе, как я могу сообщить пользователю, что решение применяется, поскольку в CQRS модель чтения не обновляется «сразу», как мне сделать так, чтобы пользовательский интерфейс показывал, что решение находится в процессе и скоро придет?

Мне также нужно дать пользователю возможность выйти и снова войти в систему, поскольку решение, возможно, еще не применено, как мне сделать, чтобы пользовательский интерфейс отображал «экран ожидающих решений»?

Ответы [ 2 ]

7 голосов
/ 25 ноября 2010

Ответ состоит в том, чтобы немедленно вызвать событие, указывающее, что решение было применено, обновить прочитанную БД и сразу же перенаправить на экран ожидающих решений, независимо от того, была ли обновленная БД прочитана к тому времени. Статический текст «В ожидании решения с вами свяжутся» или что-то в этом роде. Они могут обновить или вернуться позже и, скорее всего, получат реальные данные. Затем, когда решение будет принято, у вас возникает событие DecisionMade и вы обновляете прочитанную БД и отправляете электронные письма, в любом случае, соответственно.

Это компромисс с возможной последовательностью, с которой вам придется иметь дело в CQRS. Часто, когда я вносил изменения в свойства объекта домена в форме, я подделывал это в немедленной обратной связи, которую пользователь получает, пока сервер выполняет свои обязанности. Да, немного некрасиво, но пользователи этого не знают.

3 голосов
/ 11 сентября 2010

ИМХО, решение будет состоять в том, чтобы позволить вашей команде генерировать события "ApplyForDecisionRequested" и "ApplyForDecisionHandled" и соответствующим образом обновить модель чтения.

...