Быстрый старт Symfony DI (Dependency Injection) Учебник
Что такое Dependency Injection (DI)?
Вложение зависимости является метод, который позволяет слабосвязанных объектов в приложении. Как правило, если объект требует доступа к функциональности другого было бы экземпляр внутренне приводит к сильно связанных систем. Осуществляя внедрение зависимости мы вводим необходимые объекты готовы к использованию (иногда также называется инверсией контроля - МОК). Рассмотрим следующий пример:
<? PHP лицо, принимающее решения класса { общественных makeDecision функции (массив $ параметров) { / / Необходимо адаптера БД $ Др = новый DecisionParameters (); $ = $ ParameterScore др-> getScore ($ параметров); / * ... Еще несколько логики принятия решений ... * / возвращения ($ parameterScore> 50); } }
Этот фрагмент кода, как говорят, тесно связан с объектом DecisionParameters. Переписывая выше в слабосвязанных моды мы бы что-то вроде ....
<? PHP лицо, принимающее решения класса { частные $ _dp; публичную функцию __construct ($ др) { $ Это-> _dp = $ др; } общественных makeDecision функции (массив $ параметров) { $ = $ ParameterScore этом-> _dp-> getScore ($ параметров); / * ... Еще несколько логики принятия решений ... * / возвращения ($ parameterScore> 50); } }
Хотя получение преимуществ слабосвязанных код, который мы добавляем такие сложности, что каждый раз создается экземпляр объекта мы также должны инстанцировать его зависимости и передать их в слишком. Например, это:
$ = Выбор новых лицо, принимающее решения (); Эхо $ выбор-> makeDecision (массив ('усилие' => 'низкий', 'возвращение' => 'высокий'));
Теперь становится:
$ Др = новый DecisionParameters (); $ = Выбор новых лицо, принимающее решения ($ др); Эхо $ выбор-> makeDecision (массив ('усилие' => 'низкий', 'возвращение' => 'высокий'));
Эта ситуация становится все более болезненным, как число зависимостей для класса увеличивается, и что делать, если зависимостей сами зависимости? Это может очень быстро стать кошмаром объект администрации! Введите внедрение зависимости контейнеров (или рамки) ...
Продолжить чтение "Быстрый старт Symfony DI (Dependency Injection) Учебник" »
















































