CQRS - разрешено ли вызывать сторону чтения со стороны записи?

Я начал с чтения о CQRS, и я немного смущен.

Разрешено ли вызывать сторону чтения в пределах записи для получения дополнительной информации?

http://cqrs.nu/Faq/command-handlers здесь они говорят, что это запрещено, но в коде кода cqrs я обнаружил, что они называют услугу "IPricingService", которая внутренне использует службу DAO класс.

Итак, что я должен сделать, чтобы получить дополнительную информацию внутри моего корня агрегации?

Ответы

Ответ 1

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

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

Однако определение "клиент" может быть предметом обсуждения. Например, я бы не стал доверять публичному обращению к браузерному приложению JS как надлежащий "клиент" . Вместо этого я бы использовал свой слой REST API как "клиент" в CQRS, и веб-приложение было бы просто уровнем пользовательского интерфейса для этого клиента. В этом случае обработка вызова службы REST API будет законным читателем на стороне чтения, поскольку для проверки целостности любого уровня на уровне пользовательского интерфейса требуется подтверждение того, что для предотвращения подделки и проверки некоторых бизнес-правил требуется подтверждение. Когда эта работа будет выполнена, команда будет сформирована и отправлена ​​на сторону записи. Валидации и все остальное синхронно, а обработка команд асинхронна.

ОБНОВЛЕНИЕ: В свете некоторых разногласий ниже я хотел бы указать на статью Udi от 2009 года, в которой рассказывается о CQRS в целом, командах и валидации в частности.

Ответ 2

Часто задаваемые вопросы по CQRS (http://cqrs.nu/Faq):

"Как я могу связываться между ограниченными контекстами?

Исключительно с точки зрения их публичного API. Это может быть связано с подпиской на события, исходящие из другого ограниченного контекста. Или один ограниченный контекст может действовать как обычный клиент другого, отправляя команды и запросы. "

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