Een snelle introductie tot Dependency Injection: wat het is en wanneer het gebruikt moet worden

door Bhavya Karia

Inleiding

In software engineering is dependency injection een techniek waarbij een object (of statische methode) de afhankelijkheden van een ander object levert. Een afhankelijkheid is een object dat gebruikt kan worden (een service).

dat is de Wikipedia-definitie, maar toch, maar het is niet bijzonder gemakkelijk te begrijpen. Dus laten we het beter begrijpen.,

voordat we begrijpen wat het betekent in programmeren, laten we eerst zien wat het in het algemeen betekent, omdat het ons zal helpen het concept beter te begrijpen.

afhankelijkheid of afhankelijkheid betekent vertrouwen op iets voor ondersteuning. Als ik zeg dat we te veel vertrouwen op mobiele telefoons dan betekent dat dat we afhankelijk zijn van hen.

dus voordat we naar dependency injecties gaan, laten we eerst begrijpen wat een afhankelijkheid in programmeren betekent.

wanneer Klasse A enige functionaliteit van klasse B gebruikt, dan wordt gezegd dat Klasse A een afhankelijkheid van klasse B heeft.,

afhankelijkheden tussen klassen tonen

in Java, voordat we methoden van andere klassen kunnen gebruiken, moeten we eerst het object van die klasse aanmaken (dat wil zeggen dat Klasse A een instantie van klasse B moet maken).

dus, het overdragen van de taak van het maken van het object aan iemand anders en direct gebruik van de afhankelijkheid wordt afhankelijkheid injectie genoemd.

What if code could speak?

Waarom moet ik dependency injection gebruiken?,

laten we zeggen dat we een auto klasse hebben die verschillende objecten bevat zoals wielen, motor, enz.

Hier is de auto-klasse verantwoordelijk voor het maken van alle afhankelijkheidsobjecten. Nu, wat als we besluiten om MRFWheels in de toekomst te dumpen en willen Yokohama wielen gebruiken?

we moeten het car-object opnieuw maken met een nieuwe Yokohama-afhankelijkheid. Maar als we dependency injection (DI) gebruiken, kunnen we de wielen tijdens runtime veranderen (omdat afhankelijkheden tijdens runtime kunnen worden geïnjecteerd in plaats van tijdens het compileren).,

U kunt DI zien als de tussenpersoon in onze code die al het werk doet om het gewenste wheels object te maken en het aan de auto klasse te leveren.

Het maakt onze auto klasse onafhankelijk van het creëren van de objecten van wielen, batterij, enz.

er zijn in principe drie soorten dependency injection:

  1. constructor injection: de afhankelijkheden worden geleverd door een klasse constructor.
  2. setter injectie: de client legt een setter methode bloot die de injector gebruikt om de afhankelijkheid te injecteren.,
  3. interface injectie: de afhankelijkheid biedt een injector methode die de afhankelijkheid zal injecteren in elke client doorgegeven aan het. Clients moeten een interface implementeren die een setter-methode blootlegt die de afhankelijkheid accepteert.

dus nu is het de verantwoordelijkheid van de dependency injection om:

  1. maak de objecten
  2. weet welke klassen die objecten vereisen
  3. en geef ze al die objecten

als er een verandering in objecten is, dan kijkt DI ernaar en het zou niet de klasse moeten betreffen die deze objecten gebruikt., Op deze manier als de objecten in de toekomst veranderen, dan is zijn DI ‘ s verantwoordelijkheid om de juiste objecten aan de klasse.

inversie van controle – het concept achter DI

Dit stelt dat een klasse zijn afhankelijkheden niet statisch moet configureren, maar door een andere klasse van buitenaf moet worden geconfigureerd.

Het is het vijfde principe van S. O. L. I. D — de vijf basisprincipes van objectgeoriënteerd programmeren en ontwerpen door Uncle Bob – dat stelt dat een klasse moet afhangen van abstractie en niet van concreties (in eenvoudige termen, hard-gecodeerd).,

volgens de principes moet een klasse zich concentreren op het vervullen van haar verantwoordelijkheden en niet op het creëren van objecten die zij nodig heeft om deze verantwoordelijkheden te vervullen. En dat is waar afhankelijkheid injectie in het spel komt: het voorziet de klasse van de vereiste objecten.

opmerking: als je meer wilt weten over SOLID principles van Oom Bob dan kun je naar deze link gaan.

voordelen van het gebruik van DI

  1. helpt bij het testen van eenheden.
  2. de Ketelplaatcode wordt verminderd, omdat het initialiseren van afhankelijkheden wordt gedaan door de injectorcomponent.,
  3. het uitbreiden van de toepassing wordt eenvoudiger.
  4. helpt om losse koppeling mogelijk te maken, wat belangrijk is bij het programmeren van toepassingen.

nadelen van DI

  1. Het is een beetje complex om te leren, en als overmatig gebruikt kan leiden tot managementproblemen en andere problemen.
  2. veel compileertijdfouten worden naar runtime gepusht.
  3. Dependency injection frameworks worden geïmplementeerd met reflectie of dynamisch programmeren. Dit kan het gebruik van IDE-automatisering belemmeren, zoals “zoek referenties”, “toon aanroephiërarchie” en veilige refactoring.,

U kunt dependency injection zelf implementeren (Pure Vanilla) of gebruik maken van bibliotheken of frameworks van derden.

Bibliotheken en Frameworks die di

  • Spring (Java)
  • Google Guice (Java)
  • Dagger (Java en Android)
  • Castle Windsor (. net)
  • Unity (.,NET)

voor meer informatie over dependency injection kunt u de volgende bronnen raadplegen:

Java Dependency Injection — di Design Pattern Example Tutorial — JournalDev

gebruik maken van dependency injection in Java-Introduction-Tutorial-Vogella

inversie van controle Containers en het Dependency Injection pattern-Martin Fowler

hoop dat het helpt!

als je het artikel leuk vond en meer geweldige artikelen wilt lezen, volg me dan hier (Bhavya Karia) en toon je steun omdat het me motiveert om meer te schrijven.,

als u vragen of feedback voor mij dan laten we verbinden op LinkedIn, Twitter , Facebook.

Edit 1:

dankzij Sergey Ufocoder is dit artikel nu omgezet in de Russische taal. Mijn russische vrienden en die allemaal de Russische taal kunnen lezen, lezen het wel.

Link naar het artikel

ook als u DI in JavaScript wilt toepassen en op zoek bent naar een bibliotheek, dan stelt Jo Surikat voor dat u zijn bibliotheek probeert.

Di-Ninja

nog een geweldige DI-bibliotheek in JavaScript werd voorgesteld door Nicolas Froidure.,

knifecycle

Edit 2:

als u een PHP-ontwikkelaar bent dan maak je geen zorgen, heb je ook allemaal gedekt. Gordon Forsythe adviseerde deze geweldige bibliotheek die jullie allemaal zouden willen uitproberen.

auryn

Bedankt voor alle vriendelijke woorden die ik heb ontvangen. Deel het artikel zodat meer en meer mensen kunnen worden geprofiteerd.

Share

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *