Ich lese Theorie über Abhängigkeitsinversion und -entkopplung und kann den Unterschied zwischen den beiden nicht erkennen.
Bei der Abhängigkeitsinversion geht es um die Entkopplung von Funktionskomponenten, damit Komponenten höherer Ebenen nicht von Komponenten niedrigerer Ebenen abhängen.
Die Entkopplung spricht über dasselbe und wie man es erreicht. Aber dann haben wir IoC-Container , die die Dinge noch weiter durcheinander bringen. Warum werden sie nicht eher als Abhängigkeitsinversionscontainer oder noch besser als Abhängigkeitsinjektionscontainer bezeichnet , weil sie der Laufzeitkopplung unabhängiger Komponenten dienen?
Dann haben wir Inversion of Control . Es ist im Grunde das Gleiche wie Dependency Inversion, nicht wahr? Warum gibt es drei Begriffe, die dasselbe beschreiben? Oder bin ich blind?
- Was ist der Unterschied zwischen den drei?
- Was muss IoC in IoC-Containern tun?
quelle
Antworten:
Die Entkopplung ist ein sehr allgemeines Prinzip, das in vielen Bereichen anwendbar ist. Die Abhängigkeitsinversion ist eine spezielle Form der Entkopplung, bei der Sie die höheren Ebenen Ihres Systems von den niedrigeren Ebenen entkoppeln, indem Sie sie in Bibliotheken unterteilen und Schnittstellen verwenden. Auf diese Weise können Sie untergeordnete Teile Ihres Systems ohne größere Nacharbeiten ersetzen.
Anstelle der übergeordneten Teile des Systems, die konkrete Instanzen der untergeordneten Klassen erstellen, kann beispielsweise ein IoC-Container verwendet werden, um die Erstellung von Objekten zu entkoppeln.
Die Inversion der Steuerung ist ein Entwurfsprinzip, das von Framework-Bibliotheken verwendet wird, mit denen das Framework die Kontrolle über die Anwendung wiedererlangen kann. Das heißt, ein Fensterframework kann den Anwendungscode zurückrufen, wenn bestimmte Ereignisse der Benutzeroberfläche auftreten. Martin Fowler verwendet den Begriff Hollywood-Prinzip wie in Rufen Sie uns nicht an, wir rufen Sie an . Die Entkopplung ist ein wichtiger Bestandteil der Umkehrung der Kontrolle.
Aber was hat ein IoC-Container mit der Umkehrung der Kontrolle zu tun? Um Martin Fowler zu zitieren :
(Beachten Sie, dass Martin Fowler von Abhängigkeitsinjektion und nicht von Abhängigkeitsinversion spricht .)
Ein IoC-Container hilft bei der Implementierung der Abhängigkeitsinjektion, und ein besserer Begriff wäre möglicherweise der Abhängigkeitsinjektionscontainer. Der Name des IoC-Containers scheint jedoch zu bleiben. Die Abhängigkeitsinjektion ist eine wichtige Komponente bei der Abhängigkeitsinversion, aber die Verwendung von IoC-Containern für die Abhängigkeitsinjektion kann verwirrend sein, da die Inversion der Steuerung ein umfassenderes und allgemeineres Prinzip ist.
Sie weisen darauf hin, dass die Benennung nicht sehr konsistent ist, aber das sollte keine große Überraschung sein, da diese Begriffe unabhängig erfunden und verwendet wurden, obwohl sie sich überschneiden.
quelle
Die Abhängigkeitsinjektion erreicht die Entkopplung durch Inversion of Control .
quelle
Ich finde die folgende Erklärung von DIP im Wild- Artikel auf martinfowler.com einfach zu verstehen (hier DI = Dependency Injection, DIP = Dependency Inversion Principle, IoC = Inversion of Control):
quelle
Abhängigkeitsinversion: Abhängig von Abstraktionen, nicht von Konkretionen.
Umkehrung der Kontrolle: Main vs Abstraction und wie der Main der Klebstoff der Systeme ist.
Dies sind einige gute Beiträge, die darüber sprechen:
https://coderstower.com/2019/03/26/dependency-inversion-why-you-shouldnt-avoid-it/
https://coderstower.com/2019/04/02/main-and-abstraction-the-decoupled-peers/
https://coderstower.com/2019/04/09/inversion-of-control-putting-all-together/
quelle