DIP-vs. DI vs. IoC
Seit etwa 2 Monaten, die ich gelesen habe alles, was ich finden kann für diese 3 Themen und ich bin mir noch nicht sicher, ob ich es bekam.
-
Dependency Inversion Prinzip. Heißt, Sie sollten immer nur verlassen sich auf Schnittstellen und nicht auf deren Umsetzung. Wenn Ihre Klasse hängt von einer anderen Klasse, das ist schlecht, denn es hängt davon ab, dass die zweite Klasse' details. Wenn Ihre Klasse, hängt am interface, das ist absolut OK, da diese Art der Abhängigkeit heißt nur, dass deine Klasse braucht etwas Abstrakt sind, dass Sie tun können, etwas bestimmtes und Sie nicht wirklich die Art und Weise Sie es tut.
Da P in "DIP" steht für "Prinzip", ich sollte wohl definieren es so: Dependency-Inversion-Prinzip ist ein Prinzip, das verlangt, dass alle Ihre code-Entitäten hängt nur an details, die Sie wirklich müssen.
Durch "details, die Sie wirklich brauchen," ich meine, die Schnittstellen für den einfachsten Fall. Ich benutzte auch das Wort "Personen" zu betonen, dass der DIP ist auch anwendbar auf Verfahren und alles, was sonst, nicht nur zu Klassen.
-
Dependency Injection. Es ist nur anwendbar auf DI-fähigen Entitäten. DI-fähigen Entität ist eine Einheit, die offen ist für die Konfiguration seines Verhaltens, ohne dabei Ihre Interna. Es gibt 2 grundlegende Arten von Injektion (wenn man über Klassen):
- Constructor Injection ist, wenn Sie übergeben Sie alle erforderlichen "abstract " details", um das Objekt direkt von der moment, es geht um konstruiert zu werden.
- Setter-Injektion - ist, wenn Sie "klären" die erforderlichen Aspekte, nachdem das Objekt bereits erstellt wurde.
So, die definition ist wohl wie folgt aus: Dependency Injection ist ein Prozess der übergabe der "abstrakten details" zu der Person, die wirklich braucht diese details.
Durch "wirklich braucht, diese details" meine ich-Schnittstellen für den einfachsten Fall. Das Wort "Unternehmen" ist, wie immer, zu betonen, dass DI ist auch anwendbar auf Verfahren und was sonst noch.
-
Inversion of Control. Es ist oft definiert als "Differenz zwischen Bibliotheken und frameworks", als "Programme zu schreiben, die so oder so hast du in der prozeduralen Programmierung" und so weiter. Dass das schwierigste für mich. Ich glaube, dass die Grundidee hier ist nur zu Beginn aller Maßnahmen. Entweder Sie tun etwas ", Wann immer Sie wollen" (Procedural), oder Sie "warten", bis jemand Sie fragt, IoC (Art und Weise).
Meine Definition ist: IoC ist eine Eigenschaft, die Ihrem Programm den ausführungsablauf, wenn Sie nichts tun, bis Sie Sie bitten, es zu tun.
Klingt es genau wie "Hollywood Prinzip", aber ich glaube, dass die "Hollywood-Prinzip" und IoC sind beide absolut die gleiche Idee.
Muss ich das verstehen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Meinung dazu ist diese: DIP ist die Prinzip, das uns leitet, gegenüber DI. Grundsätzlich lose Kopplung das ist das Ziel, und es gibt mindestens zwei Möglichkeiten, es zu erreichen.
Jedoch Service Locator ist ein anti-Muster und hat nichts zu tun mit dem DIP. DI, jedoch ist die korrekte Anwendung der DIP.
Den Beziehung zwischen DI und IoC erklärt worden ist, bevor.
BTW, wenn man über DI und lose Kopplung, finde ich die Terminologie festgelegt, die in Domain-Driven Design die meisten zutreffend. Grundsätzlich Dienste sind die einzigen Arten von Objekten unterzogen, um DI.
new
) es muss eine tatsächliche Implementierung dieser Schnittstelle zu verwenden, sonst bekommst du einen null-Zeiger-Ausnahme. Wie funktioniert der high-level-Klasse erhalten eine konkrete Klasse, wenn alle es kennt, ist eine Schnittstelle? Dependency Injection. Check-out die ausgezeichnete Buch von Mark Seemann für mehr DI details.Meine 20c mit dem Programmieren beginnen. Vermutlich haben Sie zumindest eine grobe Vorstellung davon, wie es funktioniert. Die Entwicklung eines proof-of-concept (POC) ist ein toller Weg, um zu sehen, wie die Dinge zusammen passen, und die Arbeit auf dem dev und der Laufzeit. Das Lesen dauert nur so weit, dabei wird wirklich helfen, machen Sie auf.
Wenn Sie nicht wissen, wo Sie anfangen, die meisten blog-posts über DI haben einfache Beispiele, die Sie ausführen können, bis. Nicht stecken, auf dem framework zu verwenden (Einheit, Feder, Schloss Windsor etc), weil es eigentlich egal ist, für ein POC.