Quick Start Symfony DI (Dependency Injection) Tutorial
Co to jest Dependency Injection (DI)?
Dependency Injection to technika, która pozwala na luźno powiązanych obiektów w aplikacji. Generalnie, jeśli obiekt wymaga dostępu do funkcjonalności innego byłoby instancji wewnętrznie prowadzi do ściśle powiązane systemy. Dzięki wdrożeniu dependency injection możemy wstrzyknąć wymaganych obiektów gotowy do użycia (czasami określane również odwrócenie kontroli - IOC). Weź następujący przykład:
<? Php klasy DecisionMaker { publicznych makeDecision funkcji (array $ parametry) { / / Potrzebujesz adaptera bazy danych $ Dp = new DecisionParameters (); $ ParameterScore = $ dp-> getScore ($ parametry); / * ... Niektóre więcej logiki decyzji ... * / return ($ parameterScore> 50); } }
Ten fragment kodu mówi się, że ściśle powiązane z przedmiotem DecisionParameters. Przepisanie powyżej w luźno sposób mielibyśmy coś w rodzaju ....
<? Php klasy DecisionMaker { private $ _dp; public function __construct ($ dp) { $ This-> _dp = $ dp; } publicznych makeDecision funkcji (array $ parametry) { $ ParameterScore = $ this-> _dp-> getScore ($ parametry); / * ... Niektóre więcej logiki decyzji ... * / return ($ parameterScore> 50); } }
Chociaż korzyści ze luźno kodu dodajemy złożoności takie, że za każdym razem, obiekt jest tworzony mamy także do wystąpienia jego zależności i przekazać te w zbyt. Na przykład ten:
$ Wybór = new DecisionMaker (); echo $ wyboru> makeDecision (array ('wysiłku' => 'niski', 'powrót' => 'wysoki'));
staje się teraz:
$ Dp = new DecisionParameters (); $ Wybór = new DecisionMaker ($ dp); echo $ wyboru> makeDecision (array ('wysiłku' => 'niski', 'powrót' => 'wysoki'));
Ta sytuacja staje się bardziej bolesne, jak liczba zależności dla klasy jest zwiększona, a co, jeśli zależności same zależności? To może bardzo szybko stać się koszmarem administracji obiektu! Wpisz pojemniki Dependency Injection (lub ram) ...
Kontynuuj czytanie 'Quick Start, Symfony DI (Dependency Injection) Tutorial "»
















































