Izvrsno objašnjenje ubrizgavanja ovisnosti (inverzija upravljanja)

Pročitao sam mnoštvo objašnjenja ubrizgavanja ovisnosti ili DI (prije poznatog kao Inverzija kontrole) i pripadajućeg holivudskog principa ("Ne zovi nas, mi ćemo nazvati tebe."). Svi oni imaju tendenciju biti nejasni, bilo zato što se odmah upuštaju u vrlo detaljna objašnjenja, ili ih objašnjavaju posebno za jednu određenu tehnologiju. Takav da se ili obrazac izgubi ili je njegova jednostavnost. Evo najjasnijeg objašnjenja koje sam pronašao - blago uređeno za kratkoću (od vrlo dobrog Proljeća u akciji, 2. izd. Craig Walls):

"Bilo koja netrivijalna aplikacija sastoji se od dvije ili više klasa koje međusobno surađuju kako bi izvele neku poslovnu logiku. Tradicionalno je svaki objekt odgovoran za dobivanje vlastitih referenci na objekte s kojima surađuje (njegove ovisnosti). objektima daju ovisnosti u vrijeme stvaranja neki vanjski entitet koji koordinira svaki objekt u sustavu. Drugim riječima, ovisnosti se ubrizgavaju u objekte. "

Smatram da je to vrlo jasno.

Injekcija ovisnosti izvorno se zvala Inverzija kontrole (IoC), jer bi normalna kontrolna sekvenca bila da objekt sam pronalazi predmete o kojima ovisi, a zatim ih poziva. Ovdje je ovo obrnuto: Ovisnosti se predaju objektu kada je stvoren. Ovo također ilustrira holivudski princip na poslu: Ne zovite svoje ovisnosti, dat ćemo vam ih kad vas zatrebamo.

Ako ne koristite DI, vjerojatno se pitate zašto je to velika stvar. Donosi ključnu prednost: labava spojnica. Objekti se mogu dodavati i testirati neovisno o drugim objektima, jer ne ovise ni o čemu drugom osim o onome što im proslijedite. Kada upotrebljavate tradicionalne ovisnosti, da biste testirali objekt, morate stvoriti okruženje u kojem sve njegove ovisnosti postoje i dostupne su prije nego što ga možete testirati. S DI je moguće izolirano testirati objekt dodajući mu lažne objekte za one koje ne želite ili trebate stvoriti. Isto tako, olakšano je dodavanje klase projektu jer je klasa samostalna, pa se time izbjegava "velika dlaka" u koju veliki projekti često evoluiraju.

Izazov DI-a je pisanje cijele aplikacije pomoću koje se koristi. Nekoliko predavanja nije velika stvar, ali cijela je aplikacija puno teža. Za cijele aplikacije često želite okvir za upravljanje ovisnostima i interakcijama između objekata. DI okvire često pokreću XML datoteke koje pomažu u određivanju što kome i kada proslijediti. Spring je Java DI okvir s punom uslugom; ostali lakši DI okviri uključuju NanoContainer i još lakši PicoContainer.

Većina ovih okvira ima dobre vodiče koji će pomoći početnicima da se snađu.

Ovu priču, "Izvrsno objašnjenje ubrizgavanja ovisnosti (inverzija upravljanja)" izvorno je objavio JavaWorld.