Есть ли способ объединить запрос и команду в CQRS? - PullRequest
1 голос
/ 10 июня 2019

У меня есть проект, построенный с использованием CQRS, но я не могу понять, как реализовать один вариант использования.

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

Есть ли способ сделать это в Query, не нарушая принципы CQRS? Или запрос и команда должны быть двумя отдельными вызовами API один за другим?

Ответы [ 3 ]

1 голос
/ 11 июня 2019

В CQRS ваш клиент может выполнять как команды, так и запросы. Этот клиент не обязательно кусок пользовательского интерфейса.

Это может быть обработчик конечной точки API, который

  • получить запрос
  • переслать его в конечную точку запроса
  • дождитесь ответа
  • отправить ответ звонящему
  • отправить команду на сохранение ответа
0 голосов
/ 11 июня 2019

Как сказано в @VoiceOfUnreason, может быть несколько странно влиять на изменения доменов при запросе данных.

Однако может случиться так, что вы можете изменить это.

Например, возможно, одинможет запросить прогноз сортов.Мы бы хотели сохранить этот прогноз.Тогда кажется, что запрос приводит к тому, что нам нужно сохранить результат.По-видимому, это нарушает CQS на некотором уровне, поскольку каждый запрос приведет к изменению состояния.

Если мы изменим это и сначала запросим прогноз с помощью обработки домена, а затем , что произведетрезультат или даже указатель на результат, тогда запрос будет чем-то, что вы могли бы выполнить с данными несколько раз, не "нарушая" CQS.

0 голосов
/ 10 июня 2019

Есть ли способ сделать это в Query, не нарушая принципы CQRS?

Это зависит.

Если «сохранить данные» означает «внести некоторые изменения в модель предметной области» ... ну, это было бы довольно странно.

Если задать вопрос, это не должно изменить ответ.- Бертран Мейер

С другой стороны, ведение журнала / телеметрия являются довольно обычными способами отслеживания активности приложения, так что с этим все должно быть в порядке.

Есть некоторые реалии распределенной системы в ненадежной сети, о которых вам необходимо знать (как должно быть поведение, если телеметрическая система недоступна? Каковы последствия записи запросов, которые нена самом деле достичь клиента (потому что сеть ненадежна).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...