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

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

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

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

designpatternsphp

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

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

Войти через центр авторизации
Похожие вопросы