В разных местах я читал, что одним из важных требований в DDD является наличие ограниченного контракта для репозитория:
findByName(string name)
findByEmail(string email)
etc.
И не предоставлять универсальный интерфейс запросов:
findBySpecification(Specification spec)
Я понимаю, почему это важно: иметь возможность смоделировать Репозиторий для тестов или изменить базовую среду хранения.
Хотя это правило не так сложно применять во всем приложении, я не могу понять, как его применять, когда речь идет о предоставлении пользователю формы «расширенного поиска».
Допустим, у меня есть форма, которая позволяет искать сообщения в блоге по ключевому слову , дате , автору и т. Д.
Эти критерии свободно комбинируются, и я, очевидно, не могу предоставить метод для каждого варианта использования:
findByKeyword(string keyword)
findByDateRange(Date from, Date to)
findByKeywordAndDateRange(string keyword, Date from, Date to)
findByDateRangeAndAuthor(Date from, Date to, User author)
etc.
Я что-то упустил или это одно из исключений из правила?