qnixdev
@qnixdev
Junior PHP Developer

Как изменять реализацию интерфейса «на лету»?

Есть некая условная реализация GoF pattern Strategy.
В реализациях лежат (пока) три поисковых алгоритма выемки данных из БД.

Выбор стратегии на данный момент реализован криво, через choiceStrategy(?string $param1, ?string $param2): SearchStrategyInterface { switch(); }. Данный метод возвращает конкретную реализацию стратегии в зависимости от поступивших параметров (проверка на null). При этом сам сервис-класс работает с конкретными реализациями (передаются в конструкторе), а не через интерфейс.

Как правильно организовать выбор, а если алгоритм стратегии не вернул ничего, то замену стратегии во время выполнения? Так как в объяснениях к данному паттерну везде пишется что нужно работать через интерфейс а не с конкретными реализациями.
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
glaphire
@glaphire Куратор тега PHP
PHP developer
По-хорошему у всех стратегий должен быть метод execute (или любой другой с аналогичным смыслом), это и есть объединяющий фактор для создания интерфейса.
Можно создать холостую стратегию NullStrategy, но это больше похоже на костыль, можно попробовать на уровень раньше делать проверку на нужность вызова этой стратегии
Upd. Как раз Null Object это случай холостого объекта
https://sourcemaking.com/design_patterns/null_object
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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