Ответ 1
CQRS Путешествие не должно рассматриваться как руководство. Это всего лишь история о том, что какая-то команда пробивается к CQRS и имеет все ограничения использования только стека Microsoft. Вы не должны использовать свою модель чтения в обработчиках команд или логике домена. Но вы можете запросить свою модель чтения у клиента, чтобы получить данные, необходимые для вашей команды, и проверить эту команду.
Так как я получил некоторые сокращения в этом ответе, я должен указать, что то, что я написал, - это установленная практика в рамках шаблона. Ни сторона чтения не обращается к стороне записи, ни сторона записи не получает данные со стороны чтения.
Однако определение "клиент" может быть предметом обсуждения. Например, я бы не стал доверять публичному обращению к браузерному приложению JS как надлежащий "клиент" . Вместо этого я бы использовал свой слой REST API как "клиент" в CQRS, и веб-приложение было бы просто уровнем пользовательского интерфейса для этого клиента. В этом случае обработка вызова службы REST API будет законным читателем на стороне чтения, поскольку для проверки целостности любого уровня на уровне пользовательского интерфейса требуется подтверждение того, что для предотвращения подделки и проверки некоторых бизнес-правил требуется подтверждение. Когда эта работа будет выполнена, команда будет сформирована и отправлена на сторону записи. Валидации и все остальное синхронно, а обработка команд асинхронна.
ОБНОВЛЕНИЕ: В свете некоторых разногласий ниже я хотел бы указать на статью Udi от 2009 года, в которой рассказывается о CQRS в целом, командах и валидации в частности.