iproger
@iproger
Безответственный гений

Хорошо ли использовать спецификации для запросов?

Я понял что в репозитории городить кучу методов для поиска не вариант (сразу отмечу что в моем понимании репозиторий - не коллекция). Остается либо использовать какой-то универсальный метод (где условия будут разбросаны по проекту) или... спецификации. Объясню поподробнее.
Изначально шаблон проектирования подразумевает проверку объектов на соответствие условию.

Спецификация
Строит ясное описание бизнес-правил, на соответствие которым могут быть проверены объекты. Композитный класс спецификация имеет один метод, называемый isSatisfiedBy, который возвращает истину или ложь в зависимости от того, удовлетворяет ли данный объект спецификации.

designpatternsphp

Я подумал что его можно использовать не для проверки уже готовых выборок, а для будущих. Проще говоря, создаются классы которые принимают заранее обозначенные данные и которые передаются в метод find в репозитории.
Таким образом, мы все еще сохраняем преимущество методов (все условия в одном месте), но и имеем только 1 метод в репозитории.
Уверен что такое могли придумать уже 30 лет назад. Просто хочу убедиться что такой подход имеет место быть. Еще интересно было бы узнать о его недостатках.
  • Вопрос задан
  • 128 просмотров
Решения вопроса 1
index0h
@index0h
PHP, Golang. https://github.com/index0h
Вы пытаетесь создать некий свой DSL для запросов из вне - это очень абстрактная фигня, при этом сложная в поддержке и расширении.
Есть альтернативный способ: в контроллере из пользовательского ввода создаете dto, которое отправляете в репозиторий. При этом это самое поисковое dto будет содержать все возможные условия для выборки, createdAtFrom, createdAtTo, nameStartWith,...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы