Heim  >  Artikel  >  PHP-Framework  >  Welche Vorteile bietet die Umkehrung der Kontrolle in Laravel?

Welche Vorteile bietet die Umkehrung der Kontrolle in Laravel?

WBOY
WBOYOriginal
2022-06-08 11:15:402083Durchsuche

In Laravel besteht der Vorteil der Umkehrung der Kontrolle darin, dass der IOC-Container zum Entkoppeln abhängiger Module oder Objekte verwendet werden kann. Wenn der angegebene Dienst nicht zur Verwendung geeignet ist, kann die angegebene Schnittstelle verwendet werden, ohne die vom Entwickler definierten Methoden zu ändern. Finden Sie einen geeigneten Dienst, durch den Sie es ersetzen können.

Welche Vorteile bietet die Umkehrung der Kontrolle in Laravel?

Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.

Was sind die Vorteile von Laravel Inversion of Control?

Laravel selbst ist ein IOC-Container, auch Service-Container genannt besteht darin, Module oder Objektentkopplungen zu implementieren, indem ein Dritter verwendet wird, um abhängige Module oder Objekte zu entkoppeln, und dieser Dritte ist der IOC-Container.

Container speichern die erforderlichen Dienste, damit Entwickler sie einfach aufrufen können. Um die Verwaltung dieser Dienste zu erleichtern (Entkopplung zu implementieren), hat Laravel daher beschlossen, diese Dienste nicht direkt aufzurufen. Beispielsweise hat der Entwickler eine Methode 1 definiert, die ursprünglich an Dienst B gebunden war und über Dienst B implementiert wurde ist nicht mehr B, aber eine Schnittstelle A ist definiert und der Dienst B wird über Schnittstelle A implementiert.

In diesem Prozess könnte Dienst B eine bestimmte Funktion des Entwicklers gesteuert haben. Nun ruft der Entwickler diesen Dienst nicht direkt auf, sondern ersetzt ihn durch Schnittstelle A. Daher hat Dienst B die Kontrolle über diese Funktion und Schnittstelle A verloren Erlangt die Kontrolle über diese Funktion. Dieser Vorgang wird als

bezeichnet. Der Vorteil ist :

Wenn Dienst B nicht geeignet ist, kann Schnittstelle A einen anderen Dienst finden, der den Anforderungen entspricht Ich muss die Methode 1 des Entwicklers nicht ändern. Was die Dienste betrifft, die Sie für Schnittstelle A verwenden, muss ich mir bei dieser Methode keine Gedanken machen. Wenn diese Schnittstelle A Dienst B implementieren möchte, muss die Klasse, die Dienst B implementiert, diese Schnittstelle A erben und die durch Schnittstelle A definierte abstrakte Methode in dieser B-Klasse implementieren.

Diese Schnittstelle A kann auch als Anbieter dieses Dienstes angesehen werden. Es gibt mehrere Dienstanbieter in Laravel, und sie bilden entsprechende Komponenten. Da es nun Schnittstelle A und so viele Schnittstellen BCDE gibt, muss das Format des Dienstanbieters angepasst werden angegeben werden. Methodenparameter, um ihre Regeln einzuschränken, heißt dieses Konzept: Vertrag

Der Vorteil des Vertrags besteht darin, dass er bei Bedarf ersetzt werden kann,

**Fassaden, ** Wir können es Fassade nennen. Tatsächlich handelt es sich um eine Reihe statischer Schnittstellen oder Proxys, die es Entwicklern ermöglichen, problemlos auf verschiedene an den Container gebundene Dienste zuzugreifen. Laravel wird mit einigen Fassaden wie Cache usw. geliefert. Eine Facade ist eine Klasse, mit der aus dem Container auf ein Objekt zugegriffen werden kann. Diese Funktion ist in der Facade-Klasse definiert. Laravels Fassaden und alle Fassaden, die Sie selbst definieren, erben die Fassadenklasse. Im Allgemeinen handelt es sich bei der Verwendung von xxxx, die Sie über der Klasse verwenden, ausschließlich um Fassaden. Weitere Informationen finden Sie unter dem Link: https://www.jianshu.com/p/a96715975d4e

Was soll ich also tun, wenn ich den Dienst implementieren möchte? Ist dies nicht der Fall? Der neue Dienst muss registriert und initialisiert werden. Erst wenn er im Container registriert ist, kann der Container ihn aufrufen. Zurück zum Thema

Was ist also Abhängigkeitsinjektion? Die Methode 1 des Entwicklers definiert eine Mittelsmannschnittstelle A. Diese Schnittstelle A kann im Konstruktor der Klasse 1 gespeichert werden, zu der Methode 1 in Form von Parametern gehört. Dieser Prozess wird als Abhängigkeit bezeichnet Injektion.

Solange es nicht intern erzeugt wird (z. B. durch Initialisierung, über die Factory-Methode im Konstruktor __construct oder manuell neu), sondern von außen in Form von Parametern oder anderen Formen injiziert wird, gehört es zur Abhängigkeitsinjektion

Wie führen wir eine Abhängigkeitsinjektion durch? Ganz einfach: $biller = new StripeBiller(new SmsNotifier);

Dies ist eine Abhängigkeitsinjektion. Die Abrechnungsklasse StripeBiller muss nicht berücksichtigen, wie der Benutzer benachrichtigt wird. Wir übergeben ihr direkt eine Instanz der Benachrichtigungsimplementierungsklasse SmsNotifier

. Aus Code-Sicht handelt es sich vielleicht nur um eine geringfügige Änderung, aber die Einführung dieses Entwurfsmusters wird Ihre gesamte Anwendungsarchitektur auf jeden Fall neu aussehen lassen: Da die Verantwortungsgrenzen von Klassen klar festgelegt sind, wird die Kommunikation zwischen verschiedenen Schichten und Diensten implementiert. Durch die Entkopplung wird Ihr Code einfacher zu warten; aus Sicht der schnittstellenorientierten Programmierung ist es außerdem einfacher, Abhängigkeiten durch Simulation einzufügen, und die Tests zwischen verschiedenen Klassen können vollständig isoliert werden

[Verwandte Empfehlungen:

Laravel-Video-Tutorial

]

Das obige ist der detaillierte Inhalt vonWelche Vorteile bietet die Umkehrung der Kontrolle in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn