En snabb intro till Beroendeinjektion: vad det är och när du ska använda det

av Bhavya Karia

introduktion

I programvaruteknik är beroendeinjektion en teknik där ett objekt (eller statisk metod) levererar beroenden hos ett annat objekt. Ett beroende är ett objekt som kan användas (en tjänst).

det är Wikipedia-definitionen men fortfarande, men det är inte särskilt lätt att förstå. Så låt oss förstå det bättre.,

innan vi förstår vad det betyder i programmering, låt oss först se vad det betyder i allmänhet eftersom det hjälper oss att förstå konceptet bättre.

beroende eller beroende innebär att förlita sig på något för stöd. Som om jag säger att vi förlitar oss för mycket på mobiltelefoner än det betyder att vi är beroende av dem.

så innan du kommer till beroendeinjektioner, låt oss först förstå vad ett beroende av programmering betyder.

När klass A använder vissa funktioner i klass B, då dess sade att klass A har ett beroende av klass B.,

visar beroenden mellan klasser

i Java, innan vi kan använda metoder för andra klasser, måste vi först skapa objektet för den klassen (dvs. klass A måste skapa en instans av klass B).

så, överföra uppgiften att skapa objektet till någon annan och direkt använda beroendet kallas beroendeinjektion.

tänk om koden kunde tala?

varför ska jag använda dependency injection?,

låt oss säga att vi har en bilklass som innehåller olika föremål som hjul, motor etc.

här är bilklassen ansvarig för att skapa alla beroendeobjekt. Tänk om vi bestämmer oss för att dike MRFWheels i framtiden och vill använda Yokohama Wheels?

Vi måste återskapa bilobjektet med ett nytt Yokohama-beroende. Men när du använder dependency injection (DI) kan vi ändra hjulen vid körning (eftersom beroenden kan injiceras vid körning snarare än vid kompileringstid).,

Du kan tänka dig DI som mellanhand i vår kod som gör allt arbete med att skapa det föredragna hjulobjektet och ge det till bilklassen.

det gör vår bilklass oberoende av att skapa föremål för hjul, batteri etc.

det finns i princip tre typer av beroendeinjektion:

  1. konstruktorinjektion: beroenden tillhandahålls via en klasskonstruktör.
  2. setter injection: klienten exponerar en setter-metod som injektorn använder för att injicera beroendet.,
  3. interface injection: beroendet ger en injektormetod som kommer att injicera beroendet i någon klient som skickas till den. Klienter måste implementera ett gränssnitt som exponerar en setter-metod som accepterar beroendet.

så nu är det beroendeinjektionens ansvar att:

  1. skapa objekten
  2. vet vilka klasser som kräver dessa objekt
  3. och ge dem alla dessa objekt

om det finns någon förändring i objekt, tittar DI på det och det bör inte handla om klassen som använder dessa objekt., På så sätt om objekten förändras i framtiden, är dess DI ansvar att tillhandahålla lämpliga objekt till klassen.

Inversion av kontroll —konceptet bakom DI

detta anger att en klass inte ska konfigurera sina beroenden statiskt men bör konfigureras av någon annan klass utifrån.

Det är den femte principen i S. O. L. I. D — de fem grundläggande principerna för objektorienterad programmering och design av Uncle Bob — som säger att en klass ska bero på abstraktion och inte på konkretioner (i enkla termer, hårdkodade).,

enligt principerna bör en klass koncentrera sig på att uppfylla sitt ansvar och inte på att skapa objekt som det kräver för att uppfylla dessa ansvarsområden. Och det är där beroendeinjektion kommer in i spel: det ger klassen de nödvändiga föremålen.

Obs: Om du vill lära dig om solida principer av Uncle Bob kan du gå till den här länken.

fördelarna med att använda DI

  1. hjälper till vid enhetstestning.
  2. Pannplåtkoden reduceras, eftersom initiering av beroenden görs av injektorkomponenten.,
  3. förlängning av programmet blir lättare.
  4. hjälper till att möjliggöra lös koppling, vilket är viktigt vid applikationsprogrammering.

nackdelar med DI

  1. Det är lite komplicerat att lära sig, och om överanvändning kan leda till hanteringsproblem och andra problem.
  2. många kompilera tidsfel skjuts till run-time.
  3. dependency injection frameworks implementeras med reflektion eller dynamisk programmering. Detta kan hindra användning av IDE automation, till exempel ”hitta referenser”, ”visa samtalshierarki” och säker refactoring.,

Du kan implementera beroendeinjektion på egen hand (ren vanilj) eller använda bibliotek eller ramar från tredje part.

bibliotek och ramar som implementerar DI

  • Spring (Java)
  • Google Guice (Java)
  • Dagger (Java och Android)
  • Castle Windsor (. Net)
  • Unity (.,NET)

för att lära dig mer om beroendeinjektion kan du kolla in följande resurser:

Java Dependency Injection – di Design Pattern Example Tutorial-JournalDev

använda beroendeinjektion i Java-introduktion-Tutorial-Vogella

Inversion av Kontrollbehållare och Beroendeinjektionsmönstret-Martin Fowler

hoppas det hjälper!

om du gillade artikeln och vill läsa mer fantastiska artiklar, följ mig här (Bhavya Karia) och visa ditt stöd eftersom det motiverar mig att skriva mer.,

Om du har några frågor eller feedback för mig än Låt oss ansluta på LinkedIn, Twitter , Facebook.

redigera 1:

Tack vare Sergey Ufocoder har den här artikeln nu omvandlats till ryska språket. Mina ryska vänner och som alla kan läsa det ryska språket ger det en läsning.

länk till artikeln

Om du vill använda di i JavaScript och letar efter ett bibliotek föreslår Jo Surikat att du försöker sitt bibliotek.

di-Ninja

ytterligare ett fantastiskt di-bibliotek i JavaScript föreslogs av Nicolas Froidure.,

knifecycle

redigera 2:

om du är en PHP-utvecklare så oroa dig inte, fick du alla omfattas också. Gordon Forsythe rekommenderade detta fantastiska bibliotek som ni alla kanske vill prova.

auryn

Tack för alla vänliga ord som jag har fått. Dela artikeln så att fler och fler människor kan gynnas.

Share

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *