Kratek uvod v injekcijo odvisnosti: kaj je in kdaj jo uporabiti

Uvod

V programskem inženirstvu je vbrizgavanje odvisnosti tehnika, pri kateri en objekt (ali statična metoda) zagotavlja odvisnosti drugega predmeta. Odvisnost je objekt, ki ga je mogoče uporabiti (storitev).

To je definicija Wikipedije, vendar vseeno, vendar je ni posebej enostavno razumeti. Torej, bolje razumemo.

Preden razumemo, kaj pomeni programiranje, najprej poglejmo, kaj to pomeni na splošno, saj nam bo pomagalo bolje razumeti koncept.

Odvisnost ali odvisnost pomeni zanašanje na nekaj za podporo. Tako kot če rečem, da se preveč zanašamo na mobilne telefone, kot to pomeni, da smo odvisni od njih.

Torej, preden pridemo do injekcij odvisnosti , najprej razumemo, kaj odvisnost pri programiranju pomeni.

Ko razred A uporablja nekatere funkcije razreda B, potem pravi, da ima razred A odvisnost od razreda B.

V Javi moramo, preden lahko uporabimo metode drugih razredov, najprej ustvariti objekt tega razreda (tj. Razred A mora ustvariti primerek razreda B).

Torej, prenos naloge ustvarjanja predmeta na nekoga drugega in neposredno uporabo odvisnosti se imenuje vbrizgavanje odvisnosti.

Zakaj naj uporabljam injekcijo odvisnosti?

Recimo, da imamo razred avtomobilov, ki vsebuje različne predmete, kot so kolesa, motor itd.

Tu je razred avtomobilov odgovoren za ustvarjanje vseh objektov odvisnosti. Kaj pa, če se bomo v prihodnosti odločili za MRFWheels in želimo uporabljati kolesa Yokohama ?

Avtomobilski objekt bomo morali ponovno ustvariti z novo odvisnostjo od Jokohame. Toda pri uporabi vbrizgavanja odvisnosti (DI) lahko kolo spremenimo med izvajanjem (ker je odvisnosti mogoče vbrizgati med izvajanjem in ne v času prevajanja).

DI si lahko predstavljate kot posrednika v naši kodi, ki opravi vse delo pri ustvarjanju želenega predmeta koles in ga posreduje razredu Car.

Naš razred avtomobilov je neodvisen od ustvarjanja predmetov koles, akumulatorja itd.

V osnovi obstajajo tri vrste vbrizgavanja odvisnosti:

  1. vbrizgavanje konstruktorja: odvisnosti dobimo s konstruktorjem razreda.
  2. vbrizgavanje nastavitelja: odjemalec izpostavi nastavitveno metodo, ki jo injektor uporablja za vbrizgavanje odvisnosti.
  3. vbrizgavanje vmesnika: odvisnost zagotavlja injektorsko metodo, ki bo odvisnost vbrizgala v katerega koli odjemalca, ki mu je bil poslan. Naročniki morajo implementirati vmesnik, ki izpostavi nastavitveno metodo, ki sprejema odvisnost.

Zdaj je torej naloga vbrizgavanja odvisnosti:

  1. Ustvari predmete
  2. Vedeti, kateri razredi zahtevajo te predmete
  3. In jim priskrbite vse te predmete

Če pride do kakršne koli spremembe predmetov, potem DI preuči to in ne bi smel zadevati razreda, ki uporablja te predmete. Na ta način, če se predmeti v prihodnosti spremenijo, je odgovornost njegovega DI, da razredu zagotovi ustrezne predmete.

Inverzija nadzora - koncept DI

To navaja, da razred svojih odvisnosti ne sme konfigurirati statično, temveč ga mora konfigurirati drug razred od zunaj.

To je peto načelo SOLID -pet osnovnih načel objektno usmerjenega programiranja in oblikovanja strica Boba, ki določa, da mora biti razred odvisen od abstrakcije in ne od konkrecij (preprosto povedano trdo kodirano).

V skladu z načeli se mora razred osredotočiti na izpolnjevanje svojih odgovornosti in ne na ustvarjanje predmetov, ki jih potrebuje za izpolnjevanje teh odgovornosti. In tu nastopi vbrizgavanje odvisnosti : razredu zagotovi zahtevane predmete.

Opomba: Če želite stric Bob izvedeti več o načelih SOLID, potem lahko pojdite na to povezavo.

Prednosti uporabe DI

  1. Pomaga pri testiranju enot.
  2. Koda plošče kotla se zmanjša, saj inicializiranje odvisnosti izvede injektorska komponenta.
  3. Razširitev aplikacije je lažja.
  4. Pomaga pri ohlapnem spenjanju, kar je pomembno pri programiranju aplikacij.

Slabosti DI

  1. Nekoliko je zapleteno učiti se in če pretirana uporaba povzroči vodstvene težave in druge težave.
  2. Številne napake časa prevajanja so potisnjene v čas izvajanja.
  3. Okvirji vbrizgavanja odvisnosti se izvajajo z refleksijo ali dinamičnim programiranjem. To lahko ovira uporabo avtomatizacije IDE, kot so »iskanje referenc«, »prikaži hierarhijo klicev« in varno predelavo.

Injekcijo odvisnosti lahko izvajate sami (Pure Vanilla) ali pa uporabite neodvisne knjižnice ali ogrodja.

Knjižnice in okviri, ki izvajajo DI

  • Pomlad (Java)
  • Google Guice (Java)
  • Bodalo (Java in Android)
  • Grad Windsor (.NET)
  • Enotnost (.NET)

Če želite izvedeti več o vbrizganju odvisnosti, si lahko ogledate spodnje vire:

Java Injection Dependency - Vadnica primera vzorca oblikovanja DI - JournalDev

Uporaba vbrizgavanja odvisnosti v Javi - Uvod - Vadnica - Vogella

Inverzija krmilnih posod in vzorec vbrizga odvisnosti - Martin Fowler

Upam, da pomaga!

Če vam je bil članek všeč in želite prebrati še bolj neverjetne članke, me spremljajte tukaj (Bhavya Karia) in pokažite svojo podporo, saj me spodbuja, da pišem več.

Če imate kakšna vprašanja ali povratne informacije zame, se povežemo na LinkedIn, Twitter, Facebook.

Uredi 1:

Zahvaljujoč Sergeju Ufocoderju je zdaj ta članek spremenjen v ruski jezik. Moji ruski prijatelji in vsi, ki znajo brati ruski jezik, ga preberejo.

Povezava do članka

Če želite DI uporabiti v JavaScript in iščete knjižnico, Jo Surikat predlaga, da poskusite z njegovo knjižnico.

Di-Ninja

Nicolas Froidure je predlagal še eno čudovito knjižnico DI v JavaScript.

nož

Uredi 2:

Če ste razvijalec PHP, potem ne skrbite, tudi vas vse pokrivajo. Gordon Forsythe je priporočil to neverjetno knjižnico, ki bi jo vsi želeli preizkusiti.

auryn

Hvala za vse prijazne besede, ki sem jih prejela. Dajte članek v skupno rabo, da bo lahko deležen vedno več ljudi.

Če ste se naučili celo kaj ali dve, prosim, delite to zgodbo!