Ich habe vor, einen Vortrag über Abhängigkeitsinjektion und IoC-Container zu halten, und ich suche nach guten Argumenten für die Verwendung.
Was sind die wichtigsten Vorteile dieser Technik und dieser Tools?
design-patterns
dependency-analysis
Andy Lowry
quelle
quelle
Antworten:
Für mich ist es am wichtigsten, die Einhaltung des Grundsatzes der einheitlichen Verantwortung zu vereinfachen .
DI / IoC erleichtert mir das Verwalten von Abhängigkeiten zwischen Objekten. Dies erleichtert es mir wiederum, zusammenhängende Funktionen in einen eigenen Vertrag (Schnittstelle) aufzuteilen. Infolgedessen wurde mein Code wesentlich modularer, seit ich von DI / IoC erfahren habe.
Ein weiteres Ergebnis davon ist, dass ich meinen Weg zu einem Entwurf, der das Open-Closed-Prinzip unterstützt, viel leichter durchschaue . Dies ist eine der vertrauensinspirierendsten Techniken (nach automatisierten Tests). Ich bezweifle, dass ich die Tugenden des Open-Closed-Prinzips genug vertreten kann.
DI / IoC ist eines der wenigen Dinge in meiner Programmierkarriere, die sich als "Game Changer" erwiesen haben. Es gibt eine große Qualitätslücke zwischen Code, den ich vor und nach dem Erlernen von DI / IoC geschrieben habe. Lassen Sie mich das noch etwas hervorheben. Enorme Verbesserung der Codequalität.
quelle
Die Beispiele, die mir wirklich die Augen geöffnet haben, haben gezeigt, wie es möglich war, die auf diese Weise erstellten Objekte auf einfache Weise zu testen. Zuvor hatte ich Probleme, Objekte für einen Komponententest zu isolieren. Ich habe oft Tests geschrieben, um mit einem viel größeren System zu interagieren. Dies war sehr schwierig, da das gesamte System viel weniger vorhersehbar und anfälliger für Änderungen als die einzelnen Komponenten war.
quelle
Vorteile von Abhängigkeitsinjektionen sind:
quelle
Ich denke, der tatsächliche Nutzen ist eher politischer als technischer Natur. DI ist einfach eine Alternative zum Service Locator- Muster, sonst nichts. Es macht es nicht einfacher, Prinzipien wie SRP oder OCP zu folgen oder Schichten zu entkoppeln. Andere Befragte hier verwirren unterschiedliche Konzepte und Techniken, IMO.
Sie können dieselben Ziele in Bezug auf hohe Kohäsion und niedrige Kopplung erreichen, indem Sie Service Locators verwenden oder indem Sie Abhängigkeiten direkt instanziieren, wann immer dies möglich ist (was die meiste Zeit der Fall ist).
Ich weiß, dass viele dieser Meinung nicht zustimmen werden. Ich werde gerne konkrete Beispiele diskutieren.
quelle
Wenn DI verwendet wird, um innere Objekte für Testzwecke freizulegen, wurde das Muster missbraucht.
quelle