Quick Start Symfony DI (Dependency Injection) Tutorial
Hva er Dependency Injection (DI)?
Avhengighet injeksjon er en teknikk som gjør det mulig for løst koplet objekter innenfor et program. Vanligvis hvis et objekt krever tilgang til funksjonalitet i et annet ville det være instansiert internt fører til tett koblede systemer. Ved å implementere avhengighet injeksjon injisere vi de nødvendige objektene klar til bruk (noen ganger også referert til inversjon av kontroll - IOC). Ta følgende eksempel:
<? Php class beslutningstager { offentlig funksjon makeDecision (matrise $ parametre) { / / Trenger databasen adapter $ Dp = new DecisionParameters (); $ ParameterScore = $ dp-> getScore ($ parametre); / * ... Noen mer avgjørelse logikk ... * / tilbake ($ parameterScore> 50); } }
Denne kodebit sies å være tett koplet til DecisionParameters objekt. Rewriting ovenfor i et løst koplet mote vi vil ha noe sånt ....
<? Php class beslutningstager { private $ _dp; offentlig funksjon __construct ($ dp) { $ This-> _dp = $ dp; } offentlig funksjon makeDecision (matrise $ parametre) { $ ParameterScore = $ this-> _dp-> getScore ($ parametre); / * ... Noen mer avgjørelse logikk ... * / tilbake ($ parameterScore> 50); } }
Mens få fordelene av løst koplet koden vi legger kompleksitet slik at hver gang et objekt er instansiert vi også på å bruke sin avhengigheter og passere disse på også. For eksempel dette:
$ Valget = new beslutningstager (); echo $ valg-> makeDecision (array ('innsats' => 'low', 'return' => "høy"));
Nå blir:
$ Dp = new DecisionParameters (); $ Valget = new beslutningstager (DP); echo $ valg-> makeDecision (array ('innsats' => 'low', 'return' => "høy"));
Denne situasjonen blir mer smertefullt som antallet avhengigheter for en klasse er økt, og hva om avhengigheter selv har avhengigheter? Dette kan ganske raskt bli et objekt administrasjon mareritt! Tast avhengighet injeksjon containere (eller rammeverk) ...
Fortsett å lese 'Quick Start Symfony DI (Dependency Injection) Tutorial' »
















































