http://java-design-patterns.com/patterns/abstract-factory/. в подобных примерах есть проблема: when/switch/if, который решает что инстанцировать. Т.е. помимо того, что мы пишем имплементацию нам надо еще залезть в фабрику и добавить новое условие. Т.е. фабрика получается открыта к модификациям, но не к расширению. Есть выход ессно. Помечаем все имплементации абстрактной (или любой другой) фабрики тегом и когда контейнер билдится, то получаем все затегированные сервисы и инжектим в фабрику, которая непосредственно принимает решение (где when/switch/if). В цикле потом проверяем все имплементации на релевантность (должен быть общий интерфейсный метод типа isSuitable). Есть еще способы? Может что-то поудобнее.
В symfony3.4+ стало легче (https://symfony.com/doc/3.4/service_container/tags.html#reference-tagged-services), но все же может есть еще проще способ?
через isSuitable, в симфони такого навалом
Обсуждают сегодня