Eine schnelle Einführung in Dependency Injection: was es ist und Wann es zu benutzen

von Bhavya Karia

Einleitung

In software engineering, dependency injection ist eine Technik, wobei ein Objekt (oder eine statische Methode) versorgt die Abhängigkeit von einem anderen Objekt. Eine Abhängigkeit ist ein Objekt, das verwendet werden kann (ein Dienst).

Das ist die Wikipedia-definition, aber immer noch, aber es ist nicht besonders leicht zu verstehen. Also lass es uns besser verstehen.,

Bevor wir verstehen, was es in der Programmierung bedeutet, wollen wir zuerst sehen, was es im Allgemeinen bedeutet, da es uns hilft, das Konzept besser zu verstehen.

Abhängigkeit oder abhängig bedeutet, sich auf etwas zur Unterstützung zu verlassen. Wie wenn ich sage, dass wir uns zu sehr auf Mobiltelefone verlassen, bedeutet das, dass wir von ihnen abhängig sind.

Bevor wir also zu Abhängigkeitsinjektionen gelangen, wollen wir zunächst verstehen, was eine Abhängigkeit in der Programmierung bedeutet.

Wenn Klasse A einige Funktionen der Klasse B verwendet, heißt es, dass Klasse A eine Abhängigkeit von Klasse B hat.,

Abhängigkeiten zwischen Klassen anzeigen

In Java müssen wir zuerst das Objekt dieser Klasse erstellen, bevor wir Methoden anderer Klassen verwenden können (dh Klasse A muss eine Instanz der Klasse B erstellen).

Das Übertragen der Aufgabe, das Objekt an eine andere Person zu erstellen und die Abhängigkeit direkt zu verwenden, wird als Abhängigkeitsinjektion bezeichnet.

Was wäre, wenn Code sprechen könnte?

Warum sollte ich Sie verwenden dependency injection?,

Angenommen, wir haben eine Autoklasse, die verschiedene Objekte wie Räder, Motor usw. enthält.

Hier ist die car-Klasse für die Erstellung aller Abhängigkeitsobjekte verantwortlich. Was ist nun, wenn wir uns entscheiden, MRFWheels in Zukunft zu graben und Yokohama Wheels zu verwenden?

Wir müssen das Autoobjekt mit einer neuen Yokohama-Abhängigkeit neu erstellen. Wenn wir jedoch Dependency Injection (DI) verwenden, können wir die Räder zur Laufzeit ändern (da Abhängigkeiten zur Laufzeit und nicht zur Kompilierungszeit injiziert werden können).,

Sie können sich DI als den Mittelsmann in unserem Code vorstellen, der die gesamte Arbeit erledigt, um das bevorzugte Wheels-Objekt zu erstellen und es der Car-Klasse bereitzustellen.

Es macht unser Auto klasse unabhängig von der erstellung der objekte von Rädern,Batterie, etc.

Grundsätzlich gibt es drei Arten der Abhängigkeitsinjektion:

  1. Konstruktorinjektion: Die Abhängigkeiten werden über einen Klassenkonstruktor bereitgestellt.
  2. setter injection: Der Client stellt eine Setter-Methode bereit, mit der der Injektor die Abhängigkeit injiziert.,
  3. Schnittstelleninjektion: Die Abhängigkeit stellt eine Injektormethode bereit, die die Abhängigkeit in jeden an sie übergebenen Client injiziert. Clients müssen eine Schnittstelle implementieren, die eine Setter-Methode verfügbar macht, die die Abhängigkeit akzeptiert.

Nun liegt es in der Verantwortung der Abhängigkeitsinjektion:

  1. Erstellen Sie die Objekte
  2. Wissen Sie, welche Klassen diese Objekte benötigen
  3. Und stellen Sie ihnen alle diese Objekte zur Verfügung

Wenn sich Objekte ändern, prüft DI sie und sollte die Klasse, die diese Objekte verwendet, nicht betreffen., Auf diese Weise, wenn sich die Objekte in der Zukunft ändern, liegt die Verantwortung des DI darin, der Klasse die entsprechenden Objekte bereitzustellen.

Inversion of control-das Konzept hinter DI

Dies besagt, dass eine Klasse ihre Abhängigkeiten nicht statisch konfigurieren sollte, sondern von einer anderen Klasse von außen konfiguriert werden sollte.

Es ist das fünfte Prinzip von S. O. L. I. D — die fünf Grundprinzipien der objektorientierten Programmierung und des Designs von Onkel Bob -, das besagt, dass eine Klasse von Abstraktion und nicht von Konkretionen abhängen sollte (in einfachen Worten, fest codiert).,

Gemäß den Prinzipien sollte sich eine Klasse auf die Erfüllung ihrer Verantwortlichkeiten konzentrieren und nicht auf die Erstellung von Objekten, die sie zur Erfüllung dieser Verantwortlichkeiten benötigt. Und hier kommt die Abhängigkeitsinjektion ins Spiel: Sie stellt der Klasse die erforderlichen Objekte zur Verfügung.

Hinweis: Wenn Sie mehr über SOLIDE Prinzipien von Onkel Bob erfahren möchten, können Sie zu diesem Link gehen.

Vorteile der Verwendung von DI

  1. Hilft bei Unit-Tests.
  2. Kesselplattencode wird reduziert, da die Initialisierung von Abhängigkeiten durch die Injektorkomponente erfolgt.,
  3. Die Erweiterung der Anwendung wird einfacher.
  4. Ermöglicht eine lose Kopplung, was bei der Anwendungsprogrammierung wichtig ist.

Nachteile von DI

  1. Es ist etwas komplex zu lernen, und Überbeanspruchung kann zu Managementproblemen und anderen Problemen führen.
  2. Viele Kompilierzeitfehler werden zur Laufzeit verschoben.
  3. Abhängigkeitsinjektions-Frameworks werden mit Reflektion oder dynamischer Programmierung implementiert. Dies kann die Verwendung von IDE-Automatisierung wie „Referenzen suchen“, „Anrufhierarchie anzeigen“ und sicheres Refactoring behindern.,

Sie können Dependency Injection selbst implementieren (reine Vanille) oder Bibliotheken oder Frameworks von Drittanbietern verwenden.

Bibliotheken und Frameworks, die DI implementieren

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

erfahren Sie mehr über dependency injection, können Sie überprüfen Sie den nachfolgenden Ressourcen:

Java Dependency Injection — DI Design Muster Beispiel-Tutorial — JournalDev

Mithilfe von dependency injection in Java — Einführung — Tutorial — Vogella

Inversion of Control Containers and the Dependency Injection pattern — Martin Fowler

Hoffe es hilft!

Wenn Ihnen der Artikel gefallen hat und Sie weitere erstaunliche Artikel lesen möchten, dann folgen Sie mir hier (Bhavya Karia) und zeigen Sie Ihre Unterstützung, da es mich motiviert, mehr zu schreiben.,

Wenn Sie Fragen oder Feedback für mich haben, dann lassen Sie uns auf LinkedIn, Twitter , Facebook verbinden.

Edit 1:

Danke an Sergey Ufocoder jetzt wurde dieser Artikel in die russische Sprache konvertiert. Meine russischen Freunde und die alle die russische Sprache lesen können, geben es zu lesen.

Link zum Artikel

Wenn Sie DI in JavaScript anwenden möchten und nach einer Bibliothek suchen, schlägt Jo Surikat vor, dass Sie seine Bibliothek ausprobieren.

Di-Ninja

Eine weitere großartige DI-Bibliothek in JavaScript wurde von Nicolas Froidure vorgeschlagen.,

knifecycle

Edit 2:

Wenn Sie einen PHP-Entwickler, dann Mach dir keine sorgen, haben Sie alle abgedeckt. Gordon Forsythe hat diese erstaunliche Bibliothek empfohlen, die Sie alle ausprobieren möchten.

auryn

vielen Dank für all die freundlichen Worte, die ich empfangen haben. Teilen Sie den Artikel, damit immer mehr Menschen davon profitieren können.

Share

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.