En rask intro til Avhengighet Injeksjon: hva det er, og når du skal bruke det

ved Bhavya Karia

Innledning

I software engineering, dependency injection er en teknikk der ett objekt (eller statisk metode) leverer en avhengighet til en annen gjenstand. En avhengighet er et objekt som kan brukes (a service).

Det er Wikipedia-definisjonen, men fortsatt, men det er ikke spesielt lett å forstå. Så la oss forstå det bedre.,

Før du forstå hva det betyr i programmering, la oss først se hva det betyr generelt som det vil hjelpe oss til å forstå konseptet bedre.

Avhengighet eller avhengige betyr å stole på noe for å få støtte. Som om jeg sier at vi er å stole for mye på mobiltelefoner enn det betyr at vi er avhengige av dem.

Så før du kommer til avhengighet injeksjoner, først la oss forstå hva en avhengighet i programmering innebærer.

Når En klasse bruker noen funksjonalitet i klasse B, da er det sagt at En klasse har en avhengighet av klasse B.,

som Viser avhengigheter mellom klasser

I Java, før vi kan bruke metoder for andre klasser, vi må først opprette objekt av klassen (dvs. klasse A er behov for å opprette en forekomst av klasse B).

Så, overføre oppgaven med å opprette objektet til noen andre, og direkte ved hjelp av avhengighet kalles avhengighet injeksjon.

Hva hvis koden kunne snakke?

Hvorfor bør jeg bruke dependency injection?,

La oss si at vi har en bil klasse som inneholder ulike objekter, for eksempel hjul, motor, etc.

Her bilklassen er ansvarlig for å lage alle avhengigheten objekter. Nå, hva om vi bestemmer oss for å droppe MRFWheels i fremtiden, og ønsker å bruke Yokohama Hjul?

Vi trenger for å gjenskape bil objekt med en ny Yokohama avhengighet. Men når du bruker dependency injection (DI), kan vi skifte Hjul ved kjøring (fordi avhengigheter kan injiseres ved kjøring i stedet for på kompilere tid).,

Du kan tenke deg av DI som mellommann i vår kode som gjør alt arbeidet med å skape den foretrukne hjul objekt og gi det til Bil klasse.

Det gjør vår Bil klasse uavhengig fra å lage objekter av Hjul, Batteri, etc.

Det er i utgangspunktet tre typer avhengighet injeksjon:

  1. constructor injeksjon: avhengigheter er gitt gjennom en klasse constructor.
  2. setter injeksjon: kunden utsetter en setter metode som de bruker bruker til å injisere avhengighet.,
  3. grensesnitt injeksjon: avhengigheten gir en injektor metode som vil injisere avhengighet til noen klient som sendes til den. Kunder må gjennomføre et grensesnitt som eksponerer en setter metode som tar i mot avhengigheten.

Så nå er det avhengigheten injeksjon ansvar for å:

  1. Lage objekter
  2. Vet hvilke klasser som krever disse objektene
  3. Og gi dem alle de objekter

Hvis det er noen endring i objekter, da DI ser inn i det, og det bør ikke bry klassen ved hjelp av disse objektene., På denne måten hvis objektene endre seg i fremtiden, da er det DI har ansvar for å gi de aktuelle objekter for klassen.

Inversjon av kontroll —konseptet bak DI

Dette sier at en klasse skal ikke konfigurere dets avhengigheter statisk, men bør foretas av noen andre klasse fra utsiden.

Det er det femte prinsippet av S. O. L. I. D — de fem grunnleggende prinsipper for objekt-orientert programmering og design av Onkel Bob — som sier at en klasse bør avhenge av abstraksjon og ikke på concretions (i enkle termer, hard-kodet).,

i Henhold til de prinsipper, en klasse bør konsentrere seg om å oppfylle sitt ansvar og ikke på å lage objekter som det krever for å oppfylle disse forpliktelsene. Og det er der dependency injection kommer inn i bildet: det gir den klassen med de nødvendige gjenstander.

Merk: Hvis du ønsker å lære om SOLID prinsippene med Onkel Bob deretter kan du gå til denne linken.

Fordeler med å bruke DI

  1. Hjelper i Unit testing.
  2. Kjele plate-koden er redusert, som initialiserer av avhengigheter er gjort av injektor komponent.,
  3. Utvide programmet blir enklere.
  4. Bidrar til å aktivere løs kopling, noe som er viktig i programmering.

Ulemper av DI

  1. Det er litt komplisert å lære, og hvis det er for mye kan føre til management problemer og andre problemer.
  2. Mange kompilere tid feil presses til å kjøre-time.
  3. Dependency injection rammene er implementert med refleksjon eller dynamisk programmering. Dette kan hindre bruk av IDE-automatisering, for eksempel «finn referanser», «vis samtale-hierarki» og trygt refactoring.,

Du kan implementere dependency injection på egen hånd (Ren Vanilje) eller bruke tredjeparts biblioteker eller rammeverk.

Biblioteker og Rammeverk for å implementere DI

  • Våren (Java)
  • Google Guice (Java)
  • Dolk (Java og Android)
  • Windsor Castle (.NETTO)
  • Enhet(.,NETTO)

for Å lære mer om avhengighet injeksjon, du kan sjekke ut nedenfor ressurser:

Java-Dependency Injection — DI Design Mønster Eksempel Veiledning — JournalDev

ved Hjelp av dependency injection i Java — Innledning — Veiledning — Vogella

Inversjon av Kontroll Beholdere og Avhengighet Injeksjon mønster — Martin Fowler

Håper det hjelper!

Hvis du likte artikkelen, og ønsker å lese mer fantastisk artikler, så følg meg her (Bhavya Karia) og vis din støtte som det motiverer meg til å skrive mer.,

Hvis du har spørsmål eller tilbakemeldinger til meg enn la oss koble til på LinkedIn, Twitter , Facebook.

Edit 1:

Takk til Sergey Ufocoder nå denne artikkelen har blitt omgjort til det russiske språket. Mine russiske venner og som alle kan lese det russiske språket må gi det en skrivebeskyttet.

Link til artikkelen

Også, hvis du ønsker å bruke DI i JavaScript og er på utkikk etter en biblioteket, og deretter Jo Surikat foreslår at du gi en prøve til sitt bibliotek.

Di-Ninja

En mer fantastisk DI bibliotek i JavaScript ble foreslått av Nicolas Froidure.,

knifecycle

Edit 2:

Hvis du er en PHP-utvikler så ikke bekymre deg, fikk du alt dekket, så vel. Gordon Forsythe anbefalt denne fantastiske bibliotek som dere alle kan være lurt å prøve ut.

auryn

Takk for alle gode ord som jeg har mottatt. Må dele artikkelen slik at flere og flere personer kan være til nytte.

Share

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *