В большинстве систем с которыми я работал подход к работе с БД был стандартный — репозитории, с десятками методов типа GetCustomerByName()
Давно хотелось от этого уйти, но альтернативный подход CQRS порождает некоторые вопросы.
Полная имплементация паттерна будет содержать 3 составляющих:
1) Команды. По репозиторию на каждый агрегат
2) Выборка данных: Query Objects, представляют собой миниатюрный репозиторий на каждый запрос (т.е. содержит все необходимые joins из таблиц)
3) Specification — Query Objects параметризуются спецификацией (т.е. класс, инкапсулирующий условия where)
Усложнение разработки налицо. Насколько оно того стоит? Есть у кого-нибудь опыт разработки полноценных систем с этим подходом?