CQS и обновление существующего объекта
Я просто пытаюсь понять, как происходит обновление сущности с помощью CQS. Скажем, пользовательский интерфейс позволяет пользователю обновлять несколько свойств конкретной сущности, а при отправке в серверной части создается и отправляется команда обновления.
Часть, которую я не совсем понимаю:
- Затем обработчик cmd, получающий сообщение от диспетчера, извлекает существующий объект из БД, чтобы затем сопоставить полученные свойства элемента запаса с последующим сохранением? Или же
- выполняется ли поиск существующего элемента до отправки сообщения CMD, к которому он затем присоединяется (извлеченный объект присоединяется к команде CMD, которая затем отправляется)?
Насколько я понимаю, что CQS позволяет более легкий переход к CQRS позже (при необходимости)? Это верно?
Если это так, проблема с 2 выше состоит в том, что запросы могут быть извлечены из схемы, которая сильно отличается от схемы команда / запись. Я что-то пропустил?
1 ответ
Затем обработчик cmd, получающий сообщение от диспетчера, извлекает существующий объект из БД, чтобы затем сопоставить полученные свойства элемента запаса с последующим сохранением
Да.
Если вы хотите понять cqrs, это очень поможет прочитать о ddd - не то, что они обязательно связаны, а потому, что большая часть литературы по CQRS предполагает, что вы знакомы со словарем DDD.
Но грубая схема ответственности обработчика команд
- Загрузить текущее состояние целевой команды
- Вызвать команду на цель
- Сохранять изменения в книге рекордов
Насколько я понимаю, что CQS позволяет более легкий переход к CQRS позже (при необходимости)?
Это не совсем верно - понимание различия Мейера между командой и запросами облегчает понимание паттерна CQRS, но я не уверен, что на самом деле так сильно помогает в переходе.
Если это так, проблема с 2 выше состоит в том, что запросы могут быть извлечены из схемы, которая сильно отличается от схемы команда / запись. Я что-то пропустил?
Возможно - запросы обычно выполняются из схемы, оптимизированной для запроса; Другой способ думать об этом состоит в том, что запросы возвращают разные представления одних и тех же объектов.
Ситуация может быть сложнее, когда представление команды и представление запроса разделены - так называемая возможная согласованность. В некотором смысле, вы всегда запрашиваете состояние в прошлом, но отправляете команды для определения состояния в настоящем. Таким образом, вам потребуется механизм для работы с командами, которые неверно предполагают, что цель все еще находится в каком-то предыдущем состоянии.