Я пытаюсь отделить некоторые части нашей архитектуры «большого шара грязи» и определил несколько границ, которые являются очевидными кандидатами на использование CQRS для обеспечения более гибкого и масштабируемого решения.
Типичный пример: когда клиент размещает заказ, в данный момент мы блокируем его поток, пока заказ отправляется на оплату, утверждается системой продаж и т. Д. И т. Д.
Все это может быть обработано асинхронно - что позволяет нампринимать и помещать заказы в очередь, пока система обработки платежей недоступна и т. д., но я не уверен, как мне следует управлять данными пользовательского интерфейса для клиента.
Другими словами - они размещают заказ.Их заказ идет в очередь.Если они снова войдут в свою учетную запись через пять секунд и нажмут «просмотреть заказы» - что произойдет?
- Если я получу его из центрального репо (или из кэша, который обновляется на основе этого репо),тогда пользователь не увидит свой заказ и, вероятно, попытается разместить его снова - или позвонит нам и запаникует.
- Если я вытяну его из локальной базы данных, тогда у меня будут накладные расходы на поддержание другого база данных заказов - которая должна быть синхронизирована в среде с балансировкой нагрузки и, похоже, подрывает многие преимущества CQRS.
Я хочу сделать это во многих местах- и не все из них являются настолько важными действиями, как подтверждение заказа;в некоторых случаях это так же просто, как изменение пользователем номера телефона или чего-то еще, поэтому не во всех случаях я могу просто сказать «спасибо большое, мы отправим вам электронное письмо с подтверждением» - потому что отправка электронного письма с подтверждениемписьма для каждой модификации записи кажутся мне немного чрезмерными.
Какие шаблоны или решения мне следует искать, чтобы помочь с этим?