"Quick Start" Symfony DI (dependency injection) Susipažinkite
Kas yra dependency injection (DI)?
Dependency injection yra technika, kuri leidžia silpnai susijusios programinės įrangos objektus. Paprastai jei objektas reikalauja prieigos prie kitos funkcionalumą, ji bus instantiated viduje sandariai sujungtas sistemas. Įgyvendinant priklausomybės injekcija suleiskite objektų, paruoštas naudoti (kartais taip pat vadinamas inversija kontrolė - TOK). Paimkite šį pavyzdį:
<? Php klasės, priima sprendimą { visuomenės funkcija makeDecision (masyvo $ parametrų) { / / Reikia adapteris duomenų bazės $ Dp = nauji DecisionParameters (); $ ParameterScore = $ DP-> getScore ($ parametrai); / * ... Šiek tiek daugiau sprendimo logika ... * / grįžimo ($ parameterScore> 50); } }
Šis kodo fragmentą, turi būti sandariai sujungtas su DecisionParameters objektas. Perrašyti tai, kas išdėstyta pirmiau, silpnai susijusios mados mes norime ką nors panašaus ....
<? Php klasės, priima sprendimą { privataus $ _dp; viešoji funkcija __construct ($ DP) { $ This-> _dp = $ DP; } visuomenės funkcija makeDecision (masyvo $ parametrų) { $ ParameterScore = $ this-> _dp-> getScore ($ parametrai); / * ... Šiek tiek daugiau sprendimo logika ... * / grįžimo ($ parameterScore> 50); } }
Nors vis mes pridėti sudėtingumo, pavyzdžiui, kad kiekvieną kartą, kai objektas yra instantiated, mes taip pat turime instancija savo priklausomybes ir perduoti šias per silpnai susijusios kodas nauda. Pavyzdžiui, šis:
$ Pasirinkimas = nauji, priima sprendimą (); echo $ pasirinkimo> makeDecision (array ("pastangų" => "žemas", "grąžinimas" => "aukštas"));
dabar tampa:
$ Dp = nauji DecisionParameters (); $ Pasirinkimas = nauji, priima sprendimą ($ DP); echo $ pasirinkimo> makeDecision (array ("pastangų" => "žemas", "grąžinimas" => "aukštas"));
Tokia situacija tampa labiau skausminga klasė priklausomybių skaičius yra padidintas, ir ką daryti, jei patys priklausomybes priklausomybių? Tai galima gana greitai tampa objekto administravimo košmaras! Įveskite dependency injection konteinerius (ar sistemas) ...
Tęsti svarstymo "Quick Start" Symfony DI (dependency injection) Susipažinkite "»
















































