Прежде всего, вы делаете неправильное утверждение:
"... читать модель ProductCatalogueItem построен из агрегатов / моделей записи ..."
Читать модель не знаетагрегатов или чего-либо другого в модели записи, вы строите модель чтения непосредственно из базы данных, возвращая данные, необходимые для пользовательского интерфейса.
Итак, модель представления - это модель чтения, и она не касается записимодель. Вот почему существует CQRS: для того, чтобы иметь другую модель, модель чтения, чтобы оптимизировать запросы для возврата данных, необходимых клиенту.
ОБНОВЛЕНИЕ:
Я попытаюсь объяснить себя лучше:
CQRS просто разбивает один объект на два, основываясь на типах методов. Существует два типа методов: команда (любой метод, который изменяет состояние) и запрос (любой метод, который возвращает значение). Вот и все.
Когда вы применяете этот шаблон к границе службы приложения, у вас есть служба записи и служба чтения, и вы можете по-разному масштабировать обработку команд и запросов, а также можете иметь двамодели.
Но CQRS не имеет двух баз данных, не является системой обмена сообщениями, не является последовательной последовательностью, не обновляет модель чтения из модели записи, не является источником событий. Вы можете сделать CQRS без них. Я говорю это потому, что видел некоторые неправильные представления в ваших утверждениях.
При этом дизайн модели чтения выполняется в соответствии с информацией, которую пользователь хочет видеть в пользовательском интерфейсе, т. Е. Модель чтениямодель представления, у вас нет сопоставления между ними, они обе - одна и та же модель. Вы можете прочитать об этом в ссылках (3) и (6) ниже. Я думаю, что это ответ на весь ваш вопрос. Что я не понимаю, так это проблема фильтрации.
Несколько хороших ссылок:
(1) http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/
(2) http://www.cqrs.nu/Faq/command-query-responsibility-segregation
(3) книга Vaugn Vernon «Внедрение доменного дизайна». Глава 4: Архитектура, раздел «Разделение ответственности по запросам команд или CQRS»
(4) https://kalele.io/really-simple-cqrs/
(5) https://martinfowler.com/bliki/CQRS.html
(6) http://udidahan.com/2009/12/09/clarified-cqrs/