Разработка ПО: Может ли CQRS-команда возвращать результат?

Sep 05, 2021 12:18


Как то меня заинтересовал этот вопрос и оказалось не я один думал над этим.
Важно понимать, что команда может возвращать служебную информацию, например код ошибки или ошибку, если не удалось выполнить или создать команду.

Вопрос же в том, может ли команда возвращать как результат сущность или ее данные.

Thredotlabs в своей статье по CQRS предлагают для веб-приложений такие варианты:
1) после успешного выполнения команды на создание ресурса вернуть http код 200, далее сделать запрос на чтение этого ресурса.
2) в ответе на команду возвращать http код ответа 204 и http заголовок content-location, в котором указать адрес созданной сущности.
Как узнать ID сущности? Лучше всего сгенерировать uuid и передать прямо в запросе. Если не хотите работать с uuid, можете вернуть сгенерированный id в ответе - мир от этого не перевернется.

В блоге https://emacsway.github.io/ru/cqrs-command-and-result/#cqrs автор произвел анализ обсуждений этой темы и вот вывод:

"Итак, ответ прост - если вы не используете асинхронное исполнение Команды посредством инфраструктуры (Command Bus), то ничто не препятствует вам получить идентификатор вновь созданной записи БД в возвращаемом командой результате, и реализацию можно существенно упростить. Впрочем, возвратить результат можно даже используя Command Bus, но тут вопрос к потреблению ресурсов (все зависит от конкретного случая).

Вопрос не в том, возвращает ли команда результат (при этом нужно отличать результат от служебной информации, например, от успешности валидации и принятия команды), а в том, можно ли получить информацию о ресурсе без abstract side effect, т.е. смогут ли другие клиенты получить ту же информацию, если она им нужна."

cqrs, разработка ПО, база знаний, работа

Previous post Next post
Up