2016-12-12 8 views
2

Я просто пытаюсь понять, как нужно обновлять объект, используя CQS. Предположим, пользовательский интерфейс позволяет пользователю обновлять несколько свойств конкретного объекта, а при отправке в фоновом режиме создается и отправляется команда обновления.CQS и обновление существующего объекта

Часть я не совсем понимаю:

  1. делает CMD обработчик получения сообщения от диспетчера затем извлечь существующий объект из БД, чтобы затем сопоставить полученные свойства складе Пункт на то сохранить? Или
  2. - это извлечение существующего элемента, выполненного до отправки cmd-msg, к которому оно присоединено (восстановленный объект прикреплен к cmd, который затем отправляется)?

Насколько я понимаю, CQS позволяет более легко перейти на CQRS позже (при необходимости)? Это верно?

Если это так, проблема с 2 выше заключается в том, что запросы могут быть извлечены из схемы, очень похожей на запрос из схемы команды/записи. Я что-то упускаю?

ответ

2

делает CMD обработчик получения сообщения от диспетчера затем извлечь существующий объект из БД, чтобы затем сопоставить полученные свойства складе Пункт на то сохранить

Да.

Если вы хотите понять, , это поможет много читать на - не то, что они обязательно связаны между собой, а потому, что много литературы по CQRS предполагает, что вы знакомы с лексикой DDD.

Но грубая схема ответственности обработчика команды является

  1. нагрузки текущего состояния цели команды
  2. Вызовите команду на целевом
  3. Упорство изменения в книгу записи

Я понимаю, что ОКК позволяет более легкий переход к CQRS позже (при необходимости)?

Это не совсем правильно - понимание различия между командами и запросами Мейера делает анализ CQRS более легким, но я не уверен, что на самом деле это помогает в переходе.

Если это так, проблема с 2 выше заключается в том, что запросы могут быть получены из схемы, очень похожей на схему схемы ввода/вывода. Я что-то упускаю?

Возможно - запросы обычно заканчиваются схемой, оптимизированной для запроса; другой способ думать об этом заключается в том, что запросы возвращают разные представления тех же объектов.

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

+0

Спасибо за это. Я проделал пару курсов ddd и прочитал несколько Эрик Эванс, Грег Янг и Мартин Фаулер публикует эту тему, но обнаружил, что пытаясь применить то, что я узнал, я просто не был уверен в некоторых аспектах. Спасибо, что восполнили пробелы, это очень ценится. – CraigM

+0

Возможно, еще один глупый вопрос, который может быть довольно очевиден, но лучше ли выполнять обработчики команд и запросов в слое BLL или DAL? Я склоняюсь больше к слою BLL, так как тогда мне не нужно сопоставлять мои модели домена с моими моделями данных/сущностей из-за пределов обработчиков (отображение может быть инкапсулировано внутри обработчиков - предотвращение дальнейшего загрязнения моего BLL код сопоставления) - это правильно? Это также больше относится к принципу единой ответственности. – CraigM

+0

Уровень бизнес-логики, обычно - в ваших модульных тестах вы обычно тестируете команды, используя тестовый двойной для репозитория (DAL). – VoiceOfUnreason

 Смежные вопросы

  • Нет связанных вопросов^_^