Шаблон спецификации PHP, позволяющий преобразовать в sql
-
22-09-2019 - |
Вопрос
Я пытаюсь выяснить, как лучше всего создать шаблон спецификации в PHP, где спецификации можно (необязательно) преобразовать в PHP.
Я изучаю некоторые новые направления и проверяю, насколько хорошо они будут работать.Код и идеи все еще очень неясны в моей голове.
Минимальные интерфейсы будут такими:
interface IRepository {
public function get(ISpecification $specification);
}
interface ISpecification {
public function isSatisfiedBy($candidate);
}
Если репозиторий скрывает базу данных sql, спецификацию необходимо будет преобразовать в sql.Добавление метода ->toSQL() кажется случайным.Класс, который преобразует спецификации, также является вариантом, но, похоже, создание окончательного кода sql требует больших затрат.
Идеи оценены.
Решение
Цитата из POEAA (стр. 324):
Под одеялом, Репозиторий сочетает в себе Сопоставление метаданных (329) с Объект запроса (316) для автоматического создания кода SQL на основе критериев.Независимо от того, знают ли критерии, как добавить себя в запрос, Объект запроса (316) знает, как включать объекты критериев или Сопоставление метаданных (306) сам контролирует взаимодействие — это деталь реализации.
А критерии в этих описаниях конечно ваши Шаблон спецификации.Я бы сказал, что предлагаемый вами подход к использованию toSQL
Метод для объектов критериев подходит, когда приложение относительно небольшое.Как вы уже сказали, идти по другим маршрутам сложнее, но это также обеспечивает большую гибкость и развязку.В конце концов, только вы можете решить.