In Laravel ist die Fassade eine „statische“ Schnittstelle, die für die Bindungsklasse im Anwendungsdienstcontainer bereitgestellt wird. Es kann eine einfacher zu testende, flexiblere, präzisere und elegantere Syntax während der Wartung bieten. Alle Fassaden werden unter dem Namensraum „IlluminateSupportFacades“ definiert.
Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.
Facades bieten eine „statische“ Schnittstelle für die Bindung von Klassen im Anwendungsdienstcontainer.
Laravel verfügt über viele integrierte Fassaden, die auf die meisten Funktionen von Laravel zugreifen können.
Die Fassade von Laravel dient als „statischer Proxy“ für die zugrunde liegende Klasse im Servicecontainer und kann im Vergleich zu herkömmlichen statischen Methoden eine einfacher zu testende, flexiblere, präzisere und elegantere Syntax während der Wartung bieten.
Alle Fassaden in Laravel sind unter dem Namensraum IlluminateSupportFacades definiert.
Wir können leicht auf die Fassade zugreifen:
use Illuminate\Support\Facades\Cache; Route::get('/cache', function () { return Cache::get('key'); });
In der gesamten Laravel-Dokumentation verwenden viele Beispiele Fassaden, um verschiedene Funktionsmerkmale des Frameworks zu demonstrieren.
Wann man Fassaden verwenden sollte
Fassaden bieten eine einfache und leicht zu merkende Syntax, die es uns ermöglicht, die von Laravel bereitgestellten Funktionen zu nutzen, ohne uns lange Klassennamen merken zu müssen Unterstützung für PHP. Der einzigartige Einsatz dynamischer Methoden erleichtert das Testen.
Beim Einsatz von Fassaden gibt es einige Stellen, die besondere Aufmerksamkeit erfordern.
Das Hauptrisiko bei der Verwendung von Fassaden besteht darin, dass dadurch der Umfang des Kurses erweitert wird.
Da Fassaden sehr einfach zu verwenden sind und keine Injektion erfordern, verwenden wir versehentlich viele Fassaden in einer einzelnen Klasse, wodurch die Klasse immer größer wird.
Bei Verwendung der Abhängigkeitsinjektion ist der Konstruktor umso länger, je mehr Klassen verwendet werden, was visuelle Aufmerksamkeit erregt und Sie daran erinnert, dass diese Klasse etwas riesig ist. Achten Sie daher bei der Verwendung von Fassaden besonders auf die Kontrolle der Klassengröße, um den Umfang der Klasse kurz zu halten.
Bei der Entwicklung von Erweiterungspaketen von Drittanbietern, die mit Laravel interagieren, wird empfohlen, den Laravel-Vertrag einzuschleusen, anstatt Facades zur Verwendung von Klassen zu verwenden. Da Erweiterungen außerhalb von Laravel selbst erstellt werden, können Sie Laravel Facades nicht zum Testen von Hilfsfunktionen verwenden.
Facades vs. Abhängigkeitsinjektion
Einer der Hauptvorteile der Abhängigkeitsinjektion ist die Möglichkeit, die Implementierung der injizierten Klasse zu ändern. Dies ist beim Testen nützlich, da Sie einen Mock oder Stub einfügen und verschiedene Methoden aktivieren können, die auf dem Stub aufgerufen werden.
Normalerweise können wirklich statische Methoden nicht verspottet oder blockiert werden. Da Facades jedoch dynamische Methoden verwendet, um Methodenaufrufe für aus dem Service-Container aufgelöste Objekte weiterzuleiten, können wir Facades genauso testen, wie wir injizierte Klasseninstanzen testen. Zum Beispiel wie die folgende Route:
use Illuminate\Support\Facades\Cache; Route::get('/cache', function () { return Cache::get('key'); })
Wir können einen Test wie diesen schreiben, um zu überprüfen, ob die Cache::get-Methode wie erwartet aufgerufen wird:
use Illuminate\Support\Facades\Cache; /** * 一个基础功能的测试用例。 * * @return void */ public function testBasicExample() { Cache::shouldReceive('get') ->with('key') ->andReturn('value'); $this->visit('/cache') ->see('value'); }
[Verwandte Empfehlung: Laravel-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonWas ist eine Laravel-Fassade?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!