DDD учит нас, что если нашему приложению необходимо загрузить объекты модели, необходимо воспользоваться соответствующим репозиторием. Именно данный класс объектов отвечает за хранение сущностей нашей модели.
В связи с этим меня уже давно мучает идеологический вопрос, хочу посоветоваться на эту тему с хабрасообществом: а какие именно функции, помимо банальных FindAll и FindById (ну и Create/Save/Delete) должны включаться в репозитории? Если наше приложение оперирует сущностями типа Пользователь или Сотрудник — наверняка будут необходимы функции по загрузке всех активных пользователей, или пользователей, не появлявшихся на сайте больше полугода. Или, допустим, метод по получению количества пользователей, ещё не активировавших свой аккаунт. Какой класс должен отвечать за подобное? С одной стороны, логично подобные методы помещать в соответствующие репозитории, но с другой — нам ведь не нужны сами сущности, нам нужна некая проекция.
Перечитал ещё раз главу про репозитории в книге Эванса. Он пишет, что репозиторий может содержать методы по поиску объектов по значениям их атрибутов. В более общих случаях, в репозиторий можно включать методы, принимающие на вход спецификации. А также — что меня больше всего и интересовало, Эванс явно подтверждает, что в интерфейс репозитория можно включать методы, возвращающие результат простых операций над объектами (по заданному критерию). Отлично, вопрос решён!