Unde găsiți cea mai simplă explicație a modelului de injectare a dependenței

Aplicată în PHP - aici este cea mai bună carte despre șabloane (și nu numai) pe care am văzut PHP. Obiecte, șabloane și tehnici de programare de la Matt Zandstra.

Ordinea lecturii recomandă următoarele: Freeman Freeman, apoi Matt Zandstra și pentru desertul P de EAA al lui Fowler.







UPD:
Este important să se facă distincția între modelul de injecție a dependenței și containerul de injecție a dependenței.
Cel mai simplu exemplu de introducere a dependenței:

Cel mai simplu exemplu de ignorare a implementării explicite (pentru acest cod este dificil să se scrie teste unitare, este mai greu de înțeles și de editat):

Un exemplu excelent (și ușor) al DIC este pimple:

Vă sfătuiesc să citiți și să înțelegeți codul sursă pentru a vă asigura că în DIC (cel puțin pentru PHP) nu există magie. Prima versiune a fost totală

100 de linii. De asemenea, trebuie remarcat faptul că clasa sesiune utilizează modelul Injecție dependență, definind în mod explicit dependența de SessionStorage. Și containerul are doar pachetul potrivit.







Și da, containerul în sine poate fi folosit ca locator de servicii, dacă, spre exemplu, există un acces global. Dar aceasta este o practică foarte proastă, pentru că dacă ceva accesează locatorul de servicii, atunci formal începe să depindă imediat de toate componentele sistemului.

dllweb. DI - este de fapt foarte simplu. Luați și explicit (cuvântul cheie este în mod explicit) treci dependențele de codul care le cere. Prin parametrii funcției / metodei sau prin constructor. Și DIC are în vedere modul de automatizare / universalizare a acestui proces la nivelul serviciului unei aplicații web. Ie aveți o mulțime de servicii, fiecare determină în mod explicit de ce alte servicii depinde (prin parametrii designerului). Și DIC poate crea instanțe de servicii, alimentându-le copii ale serviciilor de care depind.

Unde găsiți cea mai simplă explicație a modelului de injectare a dependenței







Trimiteți-le prietenilor: