Programavimas

Puikus priklausomybės įpurškimo paaiškinimas (valdymo inversija)

Aš perskaičiau daugybę „Priklausomybės injekcijos“ arba DI (anksčiau vadintų „Inversion of Control“) paaiškinimų ir susijusio Holivudo principo („Neskambink mums, mes jums paskambinsime“) paaiškinimų. Jie visi būna neaiškūs dėl to, kad iš karto gilinasi į labai išsamius paaiškinimus, arba paaiškinimą susieja būtent su viena konkrečia technologija. Toks, kad arba modelis yra prarastas, arba jo paprastumas. Čia yra aiškiausias paaiškinimas, kurį radau - šiek tiek redaguotas trumpumo požiūriu (iš labai gero „Spring in Action“, 2-ojo leidimo. Redaktorius Craigas Wallsas):

"Bet kurią nereikšmingą programą sudaro dvi ar daugiau klasių, kurios bendradarbiauja tarpusavyje, kad atliktų tam tikrą verslo logiką. Tradiciškai kiekvienas objektas yra atsakingas už savo nuorodų į objektus, su kuriais bendradarbiauja, (savo priklausomybių) gavimą. Taikant DI, objektams jų priklausomybės kūrimo metu suteikiamos kažkokio išorinio subjekto, kuris koordinuoja kiekvieną sistemos objektą. Kitaip tariant, priklausomybės įšvirkščiamos į objektus ".

Manau, kad tai labai aišku.

Priklausomybės injekcija iš pradžių buvo vadinama valdymo inversija (IoC), nes įprasta valdymo seka būtų tai, kad objektas pats suranda objektus, nuo kurių jis priklauso, ir paskui juos iškviečia. Čia tai yra atvirkštinė: priklausomybės perduodamos objektui jį sukūrus. Tai taip pat iliustruoja Holivudo principą darbe: neskambinkite dėl savo priklausomybės, mes jums juos suteiksime, kai mums prireiks.

Jei nenaudojate DI, tikriausiai susimąstote, kodėl tai didelė problema. Tai suteikia pagrindinį pranašumą: laisvą sukabinimo įtaisą. Objektus galima pridėti ir išbandyti nepriklausomai nuo kitų objektų, nes jie nepriklauso nuo nieko kito, tik nuo to, ką jūs jiems perduodate. Naudodami tradicines priklausomybes, norėdami išbandyti objektą, turite sukurti aplinką, kurioje visos jos priklausomybės egzistuoja ir yra pasiekiamos, kad galėtumėte ją išbandyti. Naudojant DI, objektą galima išbandyti atskirai, jį praleidžiant, tyčiojamasi iš tų, kurių nenorite ar kurių nereikia kurti. Taip pat lengviau pridėti klasę prie projekto, nes klasė yra savarankiška, todėl išvengiama „didelio plauko“, kuriuo dažnai vystosi dideli projektai.

DI uždavinys yra parašyti visą programą naudojant ją. Kelios klasės nėra didelė problema, tačiau visa programa yra daug sunkesnė. Visoms programoms dažnai norite, kad sistema valdytų objektų priklausomybes ir sąveiką. DI sistemas dažnai valdo XML failai, kurie padeda nurodyti, ką ir kada perduoti. „Pavasaris“ yra visos paslaugos „Java DI“ sistema; kiti lengvesni DI rėmai apima „NanoContainer“ ir dar lengvesnį „PicoContainer“.

Daugumoje šių sistemų yra gerų pamokų, padedančių pradedantiesiems orientuotis.

Šią istoriją „Puikus priklausomybės injekcijos paaiškinimas (valdymo inversija)“ iš pradžių paskelbė „JavaWorld“.