Меня смущает в рид модели её практически неотделимость от доступа к БД.
У меня такой кейс. Есть 2 проекта: один легаси с AR, второй - это переписываемый первый c доктриной. Но переписывается не тупо с фреймворка на фреймворк, а с постепенным выносом бизнес-логики в отдельный core
пакет, в котором красивая доменная модель, куча валидации и тестов. core через composer подключается в проект-consumer.
В core
- чистая domain model, UseCases для неё и интерфейсы-адаперы. UseCases - это в основном запись, а вся инфраструктура для доступа к базе скрыта за адаптерами. То есть их конкретная реализация пишется уже в проекте-consumere core.
Так вот если с UseCases понятно и все красиво, то с ReadModel не очень понятно. Потому что с одной стороны хочется некоторые Queries вынести в core и сделать частью core функциональности приложения, с другой стороны, по идее вынести можно только какие-то DTO-объекты, а Fetcher-ы вынести не получится так как они обычно используют базу напрямую (то есть чистый SQL пишется).
Или может я размышляю о несовместимых вещах.. Или может быть рид модель все таки специфична для каждого consumer-проекта и тут это неприменимо.