Stručný úvod do aplikácie Dependency Injection: čo to je a kedy ju použiť

Úvod

V softvérovom inžinierstve je injekcia závislostí technika, pri ktorej jeden objekt (alebo statická metóda) dodáva závislosti druhého objektu. Závislosť je objekt, ktorý sa dá použiť (služba).

Toto je definícia na Wikipédii, ale stále to nie je zvlášť ľahké pochopiť. Poďme to teda lepšie pochopiť.

Pred pochopením toho, čo to znamená v programovaní, sa najskôr pozrime, čo to znamená vo všeobecnosti, pretože nám pomôže lepšie pochopiť tento koncept.

Závislosť alebo závislosť znamená spoliehať sa na niečo ako podpora. Ako keby som povedal, že sa príliš spoliehame na mobilné telefóny, znamená to, že sme na nich závislí.

Takže predtým, ako sa dostaneme k injekciám závislostí , najskôr pochopíme, čo znamená závislosť v programovaní.

Keď trieda A používa niektoré funkcionality triedy B, potom povedala, že trieda A je závislá od triedy B.

V prostredí Java, skôr ako použijeme metódy iných tried, je potrebné najskôr vytvoriť objekt tejto triedy (tj. Trieda A musí vytvoriť inštanciu triedy B).

Prenesenie úlohy vytvorenia objektu na niekoho iného a priame použitie závislosti sa teda nazýva injektáž závislosti.

Prečo by som mal používať injekciu závislostí?

Povedzme, že máme triedu automobilov, ktorá obsahuje rôzne predmety, ako sú kolesá, motor atď.

Trieda automobilov je tu zodpovedná za vytvorenie všetkých objektov závislostí. Čo by sa stalo , keby sme sa v budúcnosti rozhodli vypustiť MRFWheels a chceli by sme použiť kolesá Yokohama ?

Budeme musieť znovu vytvoriť objekt automobilu s novou závislosťou od Jokohamy. Ale keď používame vkladanie závislostí (DI), môžeme meniť kolieska za behu (pretože závislosti je možné vkladať skôr za behu, ako v čase kompilácie).

Môžete si predstaviť DI ako sprostredkovateľa v našom kóde, ktorý robí všetku prácu pri vytváraní preferovaného objektu kolies a poskytuje ho triede Car.

Vďaka tomu je naša trieda automobilov nezávislá od vytvárania objektov Kolesá, Batérie atď.

V zásade existujú tri typy vkladania závislostí:

  1. injektor konštruktora: závislosti sa poskytujú prostredníctvom konštruktora triedy.
  2. setter injection: klient vystavuje setterovu metódu, ktorú injektor použije na vloženie závislosti.
  3. vstrekovanie rozhrania: závislosť poskytuje injektorovú metódu, ktorá vloží závislosť do každého klienta, ktorý mu bude odovzdaný. Klienti musia implementovať rozhranie, ktoré sprístupňuje metódu setter, ktorá akceptuje závislosť.

Takže teraz je zodpovednosť za injekciu závislosti:

  1. Vytvorte objekty
  2. Zistite, ktoré triedy tieto objekty vyžadujú
  3. A poskytnite im všetky tieto objekty

Ak dôjde k akejkoľvek zmene v objektoch, potom to DI preskúma a nemalo by sa to týkať triedy, ktorá tieto objekty používa. Týmto spôsobom, ak sa objekty v budúcnosti zmenia, potom je jeho zodpovednosťou DI zabezpečiť triede príslušné objekty.

Inverzia kontroly - koncept za DI

Toto uvádza, že trieda by nemala konfigurovať svoje závislosti staticky, ale mala by byť konfigurovaná nejakou inou triedou zvonku.

Je to piaty princíp SOLID -päť základných princípov objektovo orientovaného programovania a návrhu od strýka Boba - ktorý hovorí, že trieda by mala závisieť od abstrakcie a nie od konkrétností (zjednodušene povedané napevno).

Podľa zásad by sa trieda mala sústrediť na plnenie svojich povinností a nie na vytváranie objektov, ktoré na plnenie týchto povinností vyžaduje. A práve tu vstupuje do hry závislosť : poskytuje triede požadované objekty.

Poznámka: Ak sa chcete dozvedieť viac o princípoch SOLID od strýka Boba, môžete prejsť na tento odkaz.

Výhody používania DI

  1. Pomáha pri testovaní jednotiek.
  2. Kód varného štítku je znížený, pretože inicializácia závislostí sa vykonáva komponentom injektora.
  3. Rozšírenie aplikácie je jednoduchšie.
  4. Pomáha umožniť voľné spojenie, čo je dôležité pri programovaní aplikácií.

Nevýhody DI

  1. Je to trochu zložité naučiť sa, a ak ich nadmerné používanie môže viesť k problémom s riadením a ďalším problémom.
  2. Mnoho chýb pri kompilácii sa prenáša za behu.
  3. Rámce na vkladanie závislostí sa implementujú pomocou reflexie alebo dynamického programovania. To môže brániť použitiu automatizácie IDE, ako napríklad „nájsť referencie“, „zobraziť hierarchiu hovorov“ a bezpečné refaktoring.

Injekciu závislostí môžete implementovať sami (Pure Vanilla) alebo môžete použiť knižnice alebo rámce tretích strán.

Knižnice a rámce, ktoré implementujú DI

  • Jar (Java)
  • Google Guice (Java)
  • Dýka (Java a Android)
  • Castle Windsor (.NET)
  • Jednota (.NET)

Ak sa chcete dozvedieť viac o vkladaní závislostí, môžete si vyskúšať nasledujúce zdroje:

Vkladanie závislostí Java - Výukový program príkladu návrhového vzoru DI - JournalDev

Používanie vkladania závislostí v Jave - Úvod - Výukový program - Vogella

Inverzia kontrolných kontajnerov a model závislého vstrekovania - Martin Fowler

Dúfam, že to pomôže!

Ak sa vám článok páčil a chcete si prečítať úžasnejšie články, sledujte ma tu (Bhavya Karia) a prejavte mi svoju podporu, pretože ma motivuje k ďalšiemu písaniu.

Ak máte nejaké otázky alebo spätnú väzbu, obráťte sa na LinkedIn, Twitter, Facebook.

Úprava 1:

Vďaka Sergejovi Ufocoderovi bol teraz tento článok prevedený do ruského jazyka. Moji ruskí priatelia a všetci, ktorí vedia čítať ruský jazyk, to čítajú.

Odkaz na článok

Tiež, ak chcete použiť DI v JavaScripte a hľadáte knižnicu, potom Jo Surikat navrhuje, aby ste vyskúšali jeho knižnicu.

Di-Ninja

Nicolas Froidure navrhol ešte jednu úžasnú DI knižnicu v JavaScripte.

nožový cyklus

Úprava 2:

Ak ste vývojár PHP, nebojte sa, rovnako vás všetkých pokryje. Gordon Forsythe odporučil túto úžasnú knižnicu, ktorú by ste mohli vyskúšať všetci.

auryn

Ďakujem za všetky milé slová, ktoré som dostal. Zdieľajte článok tak, aby z toho mohlo mať prospech viac a viac ľudí.

Ak ste sa dozvedeli čo i len jednu alebo dve veci, zdieľajte tento príbeh!