Швидкий старт 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) Підручник" »
















































