Heim >häufiges Problem >Was bedeutet Kontrollumkehr?
Inversion of Control ist ein Designprinzip in der objektorientierten Programmierung. Es kann verwendet werden, um die Kopplung zwischen Computercodes zu reduzieren. Es kann auch die Inversion von Control verwenden, um die Steuerung von Objekten durch einen Controller zu ermöglichen Die erstellten externen Entitäten aller Objekte im System übergeben Verweise auf die Objekte, von denen sie abhängen.
Inversion of Control (abgekürzt als IoC) ist ein Entwurfsprinzip in der objektorientierten Programmierung, das verwendet werden kann, um die Anzahl der Fehler zwischen Computercodes zu reduzieren der Kopplung. Die gebräuchlichste Methode heißt Dependency Injection (DI), die andere Methode heißt Dependency Lookup. Durch die Umkehrung der Kontrolle übergibt eine externe Entität, die alle Objekte im System steuert, bei der Erstellung eines Objekts die Referenz des Objekts, von dem sie abhängt, an dieses. Man kann auch sagen, dass Abhängigkeiten in das Objekt eingefügt werden.
Inversion of Control Implementation Strategy
IoC ist ein großes Konzept und kann auf verschiedene Arten implementiert werden. Es gibt zwei Hauptformen:
Abhängigkeitssuche: Der Container stellt Rückrufschnittstellen und Kontextbedingungen für Komponenten bereit. Sowohl EJB als auch Apache Avalon verwenden diesen Ansatz. Auf diese Weise muss die Komponente die vom Container bereitgestellte API verwenden, um Ressourcen und kollaborative Objekte zu finden. Die einzige Umkehrung der Steuerung spiegelt sich nur in den oben genannten Rückrufmethoden wider: Der Container ruft diese Rückrufmethoden auf Dadurch kann der Anwendungscode relevante Ressourcen abrufen.
Abhängigkeitsinjektion: Die Komponente führt keine Positionierungsabfragen durch und stellt nur gewöhnliche Java-Methoden für den Container bereit, um Abhängigkeiten zu ermitteln. Der Container ist allein für die Zusammenstellung der Komponenten verantwortlich. Er übergibt Objekte, die Abhängigkeiten erfüllen, über JavaBean-Eigenschaften oder Konstruktoren. Die Praxis, Abhängigkeiten über JavaBean-Eigenschaften einzufügen, wird als Setter-Injektion bezeichnet. Die Praxis, Abhängigkeiten als Konstruktor-Parameter zu übergeben, wird als Konstruktor-Injektion bezeichnet Implementieren Sie die Datenzugriffsschicht
Die Datenzugriffsschicht hat zwei Ziele. Die erste besteht darin, die Datenbank-Engine von der Anwendung zu abstrahieren, sodass die Datenbank jederzeit geändert werden kann – beispielsweise von Microsoft SQL auf Oracle. In der Praxis wird dies jedoch selten durchgeführt, und es gibt nicht genügend Gründe und Möglichkeiten, bestehende Anwendungen mithilfe der Datenzugriffsschicht zu rekonstruieren. Das zweite Ziel besteht darin, das Datenmodell von der Datenbankimplementierung zu abstrahieren. Dadurch können die Datenbank oder der Code nach Bedarf geändert werden, während nur ein kleiner Teil der Hauptanwendung – die Datenzugriffsschicht – betroffen ist. Dieses Ziel ist die Umgestaltung wert, die zur Implementierung in bestehende Systeme erforderlich ist.
Modul- und Schnittstellen-Refactoring
Eine Kernidee hinter der Abhängigkeitsinjektion ist das Single-Responsibility-Prinzip. Dieses Prinzip besagt, dass jedes Objekt einen bestimmten Zweck haben sollte und dass verschiedene Teile der Anwendung, die diesen Zweck nutzen müssen, geeignete Objekte verwenden sollten. Dies bedeutet, dass diese Objekte überall im System wiederverwendet werden können. Dies ist jedoch in vielen bestehenden Systemen nicht der Fall.
Komponententests jederzeit hinzufügen
Das Einkapseln von Funktionen in das gesamte Objekt macht automatische Tests schwierig oder unmöglich. Das Refactoring auf diese Weise ermöglicht erweiterte Unit-Tests, indem Module und Schnittstellen von bestimmten Objekten isoliert werden. Es ist verlockend, ein Modul weiter zu überarbeiten und später Tests hinzuzufügen, aber das ist ein Fehler.
Verwenden Sie den Service Locator anstelle der Konstruktorinjektion
Es gibt mehr als eine Möglichkeit, eine Umkehrung der Kontrolle zu erreichen. Der gebräuchlichste Ansatz ist die Konstruktorinjektion, die erfordert, dass alle Softwareabhängigkeiten bereitgestellt werden, wenn das Objekt zum ersten Mal erstellt wird. Allerdings geht die Konstruktorinjektion davon aus, dass das gesamte System dieses Muster verwendet, was bedeutet, dass das gesamte System gleichzeitig umgestaltet werden muss. Es ist schwierig, riskant und zeitaufwändig.
Empfohlenes Tutorial: „
PHP“
Das obige ist der detaillierte Inhalt vonWas bedeutet Kontrollumkehr?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!