Was ist ein guter Weg, um die Abhängigkeitsinjektion zu erklären ?
Ich habe mehrere Tutorials bei Google gefunden, aber keines davon würde davon ausgehen, dass der Leser nur ein Java-Anfänger ist. Wie würden Sie dies einem Anfänger erklären?
Was ist ein guter Weg, um die Abhängigkeitsinjektion zu erklären ?
Ich habe mehrere Tutorials bei Google gefunden, aber keines davon würde davon ausgehen, dass der Leser nur ein Java-Anfänger ist. Wie würden Sie dies einem Anfänger erklären?
Antworten:
Ich gebe Ihnen eine Abhängigkeitsinjektion für Fünfjährige.
quelle
Was ist damit?
Wenn Sie eine Klasse haben
Employee
und dieser Mitarbeiter eineAddress
hat, können Sie dieEmployee
Klasse wie folgt definieren lassen:Bisher sieht alles gut aus.
Dieser Code zeigt eine HAS-A- Beziehung zwischen dem Mitarbeiter und seiner Adresse, das ist in Ordnung.
Diese HAS-A- Beziehung hat nun eine Abhängigkeit zwischen ihnen geschaffen. Das Problem liegt beim Konstruktor.
Jedes Mal, wenn
Employee
Sie eineAddress
Instanz erstellen möchten, benötigen Sie eine Instanz:Das Arbeiten auf diese Weise wird besonders dann problematisch, wenn Sie Unit-Tests durchführen möchten.
Das Hauptproblem kommt , wenn Sie ein bestimmtes Objekt testen müssen, müssen Sie eine Instanz von anderem Objekt erstellen, und höchstwahrscheinlich benötigen Sie eine Instanz noch zu schaffen anderen Objekt , das zu tun. Die Kette kann unhandlich werden.
Um dies zu vermeiden, können Sie den Konstruktor folgendermaßen ändern:
Verwenden eines Konstruktors ohne Argumente.
Dann können Sie die Adresse festlegen, wann immer Sie möchten:
Dies kann ein Drag sein, wenn Sie mehrere Attribute haben oder wenn die Objekte schwer zu erstellen sind.
Denken Sie jedoch darüber nach, sagen wir, Sie fügen das
Department
Attribut hinzu:Wenn Sie 300 Mitarbeiter haben und alle dieselbe Abteilung haben müssen und diese Abteilung auch von einigen anderen Objekten (wie der Liste der Unternehmensabteilungen oder den Rollen der einzelnen Abteilungen usw.) gemeinsam genutzt werden muss, sind Sie hier genau richtig Es fällt Ihnen schwer, das
Department
Objekt sichtbar zu machen und es über das gesamte Netzwerk von Objekten zu teilen.Worum es bei der Abhängigkeitsinjektion geht, damit Sie diese Abhängigkeiten in Ihren Code " einfügen" können. In den meisten Frameworks können Sie dies tun, indem Sie in einer externen Datei angeben, welches Objekt injiziert werden soll.
Angenommen, eine Eigenschaftendatei für einen fiktiven Abhängigkeitsinjektor:
Sie definieren, was für ein bestimmtes Szenario injiziert werden soll.
Das Dependency Injector-Framework legt die richtigen Objekte für Sie fest, sodass Sie weder codieren
setAddress
noch codieren müssensetDepartment
. Dies würde entweder durch Reflexion oder durch Codegenerierung oder andere Techniken erfolgen.Wenn Sie das nächste Mal die
Employee
Klasse testen müssen, können Sie MockAddress
undDepartments
Objekte einfügen, ohne den gesamten Satz / Abruf für alle Ihre Tests codieren zu müssen. Noch besser ist, dass Sie Real-Address
undDepartment
Objekte in den Produktionscode einfügen können und trotzdem das Vertrauen haben, dass Ihr Code wie getestet funktioniert.Das ist ziemlich viel.
Trotzdem denke ich nicht, dass diese Erklärung für einen 5-Jährigen geeignet ist, wie Sie es gewünscht haben.
Ich hoffe, Sie finden es immer noch nützlich.
quelle
Wenn Sie eine Klasse schreiben, können Sie natürlich auch andere Objekte verwenden. Möglicherweise haben Sie beispielsweise eine Datenbankverbindung oder einen anderen Dienst, den Sie verwenden. Diese anderen Objekte (oder Dienste) sind Abhängigkeiten. Der einfachste Weg, den Code zu schreiben, besteht darin, diese anderen Objekte zu erstellen und zu verwenden. Dies bedeutet jedoch, dass Ihr Objekt eine unflexible Beziehung zu diesen Abhängigkeiten hat: Unabhängig davon, warum Sie Ihr Objekt aufrufen, werden dieselben Abhängigkeiten verwendet.
Eine leistungsfähigere Technik besteht darin, Ihr Objekt erstellen und ihm Abhängigkeiten zur Verfügung stellen zu können. Sie können also eine zu verwendende Datenbankverbindung erstellen und diese dann an Ihr Objekt übergeben. Auf diese Weise können Sie Ihr Objekt mit unterschiedlichen Abhängigkeiten zu unterschiedlichen Zeiten erstellen, wodurch Ihr Objekt flexibler wird. Dies ist die Abhängigkeitsinjektion, bei der Sie die Abhängigkeiten in das Objekt "injizieren".
Übrigens: In dem modernen Präsentationsstil, bei dem Flickr-Fotos zur Veranschaulichung von Konzepten verwendet werden, könnte dies durch einen Süchtigen veranschaulicht werden, der sich mit Drogen beschießt. Oh, warte, das ist Injektionsabhängigkeit ... OK, sorry, schlechter Witz.
quelle
Ich kenne keine vereinfachten Tutorials, aber ich kann Ihnen eine Version mit fast
25250 Wörtern oder weniger geben:Bei der Abhängigkeitsinjektion konfiguriert ein Objekt seine eigenen Komponenten nicht basierend auf bereits bekannten Dingen, sondern das Objekt wird durch eine übergeordnete Logik konfiguriert und ruft dann Komponenten auf, über die es keine Vorkenntnisse eingebaut hat. Die Idee ist, das Objekt mehr zu einer Komponente und weniger zu einer Anwendung zu machen und Konfigurationsaufgaben auf einer höheren Ebene zu verschieben. Dies erhöht die Wahrscheinlichkeit, dass das Objekt in Zukunft oder mit einer anderen Konfiguration nützlich ist.
Es ist besser zum Testen, es ist besser, wenn es Zeit ist, die Anwendung zu überarbeiten. Eine typische Implementierung legt die Konfiguration in XML ab und verwendet ein Framework zum dynamischen Laden von Klassen.
quelle
Wenn Sie einen neuen Nintendo erhalten, können Sie einfach die Tasten und den Touchscreen verwenden, um Spiele zu spielen.
Aber in der Nintendo-Fabrik müssen sie wissen, wie man eine zusammenstellt.
Wenn die klugen Leute in der Fabrik einen Nintendo DS herausbringen, wird es innen anders sein, aber Sie werden immer noch wissen, wie man es benutzt.
quelle