Definitionen
Die Inversion der Steuerung ist ein Entwurfsparadigma mit dem Ziel, das Bewusstsein für konkrete Implementierungen aus dem Anwendungsframeworkcode zu verringern und den domänenspezifischen Komponenten Ihrer Anwendung mehr Kontrolle zu verleihen. In einem herkömmlichen von oben nach unten entworfenen System fließt der logische Fluss des Anwendungs- und Abhängigkeitsbewusstseins von den obersten Komponenten, die zuerst entworfen wurden, zu denjenigen, die zuletzt entworfen wurden. Insofern ist die Umkehrung der Steuerung eine fast wörtliche Umkehrung des Steuerungs- und Abhängigkeitsbewusstseins in einer Anwendung.
Die Abhängigkeitsinjektion ist ein Muster, das zum Erstellen von Instanzen von Klassen verwendet wird, auf die andere Klassen angewiesen sind, ohne beim Kompilieren zu wissen, welche Implementierung verwendet wird, um diese Funktionalität bereitzustellen.
Zusammen arbeiten
Inversion der Steuerung kann Abhängigkeitsinjektion verwenden, da ein Mechanismus erforderlich ist, um die Komponenten zu erstellen, die die spezifische Funktionalität bereitstellen. Andere Optionen sind vorhanden und werden verwendet, z. B. Aktivatoren, Factory-Methoden usw.. Frameworks müssen jedoch nicht auf diese Utility-Klassen verweisen, wenn Framework-Klassen stattdessen die benötigten Abhängigkeiten akzeptieren können.
Beispiele
Ein Beispiel für diese Konzepte ist das Plug-In-Framework in Reflector . Die Plug-Ins haben eine große Kontrolle über das System, obwohl die Anwendung zum Zeitpunkt der Kompilierung nichts über die Plug-Ins wusste. Für jedes dieser Plug-Ins wird eine einzelne Methode aufgerufen: Initialize if memory serve, die die Steuerung an das Plug-In übergibt. Das Framework weiß nicht, was sie tun werden, sondern lässt sie es einfach tun. Die Steuerung wurde von der Hauptanwendung übernommen und der Komponente übertragen, die die spezifische Arbeit ausführt. Umkehrung der Kontrolle.
Das Anwendungsframework ermöglicht den Zugriff auf seine Funktionalität über eine Vielzahl von Dienstanbietern. Ein Plug-In erhält beim Erstellen Verweise auf die Dienstanbieter. Diese Abhängigkeiten ermöglichen es dem Plug-in, eigene Menüelemente hinzuzufügen, die Anzeige von Dateien zu ändern, eigene Informationen in den entsprechenden Bedienfeldern anzuzeigen usw. Da die Abhängigkeiten von der Schnittstelle übergeben werden, können sich die Implementierungen ändern, und die Änderungen werden die nicht beschädigen Code, solange der Vertrag intakt bleibt.
Zu der Zeit wurde eine Factory-Methode verwendet, um die Plug-Ins unter Verwendung von Konfigurationsinformationen, Reflektion und des Activator-Objekts (mindestens in .NET) zu erstellen. Heutzutage gibt es Tools, MEF zum einen, die eine größere Auswahl an Optionen beim Einfügen von Abhängigkeiten ermöglichen, einschließlich der Fähigkeit eines Anwendungsframeworks, eine Liste von Plugins als Abhängigkeit zu akzeptieren.
Zusammenfassung
Obwohl diese Konzepte unabhängig voneinander verwendet werden können und Vorteile bieten, ermöglichen sie zusammen das Schreiben von flexiblerem, wiederverwendbarem und testbarem Code. Als solche sind sie wichtige Konzepte für die Gestaltung objektorientierter Lösungen.