Sprechen Sie über die Abhängigkeitsinjektion
Bei objektorientierter Programmierung ist das Problem, mit dem wir uns häufig befassen, die Entkopplung. Je niedriger die Kopplung des Programms angibt, die Lesbarkeit und Wartbarkeit des Programms. Die Kontrollinversion (Inversion von Kontroll- oder IOC) ist ein häufig verwendetes Designprinzip der objektorientierten Programmierung. Mit diesem Prinzip können wir die Kopplung reduzieren. Unter ihnen ist die Abhängigkeitsinjektion die am häufigsten verwendete Implementierung der Kontrollinversion.
Was ist Abhängigkeit
Abhängigkeit ist ein gemeinsames Phänomen in Programmen. Zum Beispiel wird die Instanzenergie der Gleienergieklasse im Klassenwagen verwendet. Die übliche Praxis besteht darin, explizit eine Instanz der Gasenergy -Klasse in der Autokasse zu erstellen und sie Energie zuzuweisen. Wie im folgenden Code gezeigt
Grenzflächenenergie {} Klasse Gasenergy implementiert Energie {} Klasse car {Energy Energy = new gaenergy ();}Es gibt Probleme
Klassenautos übernehmen unnötige Verantwortung und sind für die Erstellung von Energieobjekten verantwortlich, die zwangsläufig eine ernsthafte Kopplung aufweisen. Um ein realistisches Beispiel zu geben, liegt es in der Verantwortung des Autos, zu verwenden, welche Energie, die ein Auto verwendet, nicht vom Auto abhängt, sondern vom Autohersteller.
Skalierbarkeit. Unter der Annahme, dass wir die Energie an elektrische Leistung modifizieren möchten, müssen wir die Autoklasse ändern, was offensichtlich nicht dem Prinzip des offenen Verschlusses entspricht.
Nicht förderlich für Unit -Tests.
Abhängigkeitsinjektion
Die Abhängigkeitsinjektion ist ein solches Verhalten. Im Klassenauto wird das Objekt in Glenergie nicht aktiv erstellt, aber die Abhängigkeit wird durch die Übergabe in der Formierung des Gasenergy -Objekts nach außen festgelegt. Es gibt drei häufige Methoden zur Abhängigkeitsinjektion.
Konstruktorinjektion
Übergeben Sie die erforderliche Abhängigkeit als Parameter des Konstruktors, um die Abhängigkeitsinjektion zu vervollständigen.
Klassenauto {Energy Menergy; öffentliches Auto (Energieenergie) {Mengergy = Energie; }}Setter -Methode -Injektion
Fügen Sie die Settermethode hinzu, der Parameter ist die Abhängigkeit, die injiziert werden muss, und die Abhängigkeitsinjektion kann abgeschlossen werden.
Klassenauto {Energy Menergy; public void setenergy (Energieenergie) {Mengergy = Energie; }}Schnittstelleninjektion
Die Schnittstelleninjektion ist selbstverständlich, es wird eine Reihe von Schnittstellen für die Abhängigkeitsinjektion erstellt, und die Abhängigkeit wird als Parameter übergeben, und die Abhängigkeitsinjektion zur spezifischen Implementierung wird durch Aufrufen einer einheitlichen Schnittstelle abgeschlossen.
Interface EnergyConsumerInterface {public void seteNergy (Energieenergie);} Class Car implementiert EnergyConsumerInterface {Energy Mengergy; public void setenergy (Energieenergie) {Mengergy = Energie; }}Die Schnittstelleninjektion ähnelt der Setter -Methode -Injektion. Der Unterschied besteht darin, dass die Schnittstelleninjektion eine einheitliche Methode verwendet, um die Injektion zu vervollständigen, während der Methodenname der Setter -Methodeninjektion relativ lässig ist.
Framework-Kompromisse
Es gibt viele Rahmenbedingungen für die Abhängigkeitsinjektion, das berühmteste ist Guice. Natürlich unterstützt der Frühling auch die Abhängigkeitsinjektion. Guice verwendet Anmerkungen im Laufzeitlese, erzeugt Abhängigkeiten und injiziert sie durch Reflexion. Dieses Formular ist für Android -Mobilgeräte nicht sehr geeignet. Schließlich werden diese Vorgänge zur Laufzeit bearbeitet und haben hohe Leistungsanforderungen.
Dagger ist eine geeignete Abhängigkeitsinjektionsbibliothek für die Entwicklung von Android. Es verwendet auch die Form von Klassenanmerkungen. Der Unterschied besteht darin, dass es Hilfsklassen zum Kompilierungszeit erzeugt und bis zur Vervollständigung der Abhängigkeitsinjektion zur Laufzeit verwendet wird.
Verwenden oder nicht
In der Tat ist es ein Problem, das Framework zu verwenden oder nicht zu verwenden. Wenn Sie das Framework verwenden, muss jeder im Team die Anweisungen befolgen, um Code zu schreiben, um die Abhängigkeitsinjektion zu lösen. Diese Frameworks sind nicht leicht zu beginnen, und die Lernkoeffizienten sind relativ komplex und schwer zu beherrschen. Dies ist auch ein Problem, das berücksichtigt werden muss.
Meine persönliche Meinung ist, dass wir die Verwendung dieser Frameworks nicht empfehlen oder ablehnen, aber ich habe das Gefühl, dass wir manchmal auf einen Rahmen hoffen, daher ist es besser, diese Probleme in unserem täglichen Leben zu beachten. Ist keine künstliche Vermeidung auch eine grundlegende Anforderung für uns selbst?
Abhängigkeitsuche
Die Abhängigkeitsuche ist die spezifische Implementierung des Kontrollinversionsprinzips, im Gegensatz zur passiven Akzeptanz der Abhängigkeitsinjektion ist die Abhängigkeitsuche eine aktive Anfrage. Bei Bedarf wird das Objekt erhalten, indem die vom Framework bereitgestellten Methoden aufgerufen werden. Bei der Erlangung sind relevante Konfigurationsdateiwege, -tasten und andere Informationen erforderlich, um den Status des zu erhaltenen Objekts zu bestimmen.
Das obige ist eine detaillierte Einführung in die Informationen zur Abhängigkeitsinjektion. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung für diese Website!