DiC через Reflection PHP
Доброго времени суток.
Вопрос про рефлексии в PHP. Простыня, нубство.
Есть так называемое веб-приложение в котором есть контроллеры и сервисы.
Вся бизнес-логика вынесена в сервисы (классы или набор классов) которые дергаются контроллером.
На данный момент объект сервиса инстанцируется так:
$service = App::Service('NameService');
В самом App происходит проверка наличия у пользователя прав на использование этого сервиса и в случае успеха возвращает объект.
Каждый сервис тоже может запускать другие сервисы и взаимодействовать с ними. Это происходит по той же схеме.
Так вот. Появилось желание отвязать все контроллеры и сервисы от App и сделать Dependency Injection.
Как я это представляю:
- В конструкторе класса контроллера или сервиса, в параметры через тайпхинт указываем нужные зависимости.
- DiC используя рефлексию просматривает конструктор и получает имена классов вместе с namecpace и потом все нужные объекты передаются в конструктор.
Казалось бы, все здорово. Но за один запрос таких рефлексий может быть больше десятка (да вообще сколько угодно), ведь DiC придется рекурсивно проходить по всем зависимостям всех сервисов участвующих в запросе.
К плюсам такого подхода я отношу ослабление связанности и «утоньшение» контроллеров. Но стоит ли оно того? На сколько такой подход будет замедлять систему? Понятно что в каких то случаях это экономия на спичках, но все таки.
Я понимаю что ресурс не PHPшников, но ЛОР как то роднее.
cast KRoN73