2013-02-26 7 views
10

Ich bin ziemlich verwirrt.Versuchen zu verstehen, warum Laravel die vielen statischen Methoden nicht als schlechte Praxis gilt

Ich habe ein paar Entwickler auf Reddit gebeten, meine Codes zu überprüfen. Es sieht aus wie das.

Template::load('register', array('error_message' => Language::translate('username_in_use')); 

So lädt es register.php, ersetzt {error_message} mit der Übersetzung. (Leider ist der Benutzername verwendet wird. Bitte eine andere Auswahl.)

sie sagte zu viele statische Anrufe über eine schlechte Praxis ist. Dennoch schlagen sie Laravel-Framework vor, das $ dieses vollständig beseitigt und statische Aufrufe verwendet.

Kann mir jemand erklären, wie kommt es, wenn diese schlechte Praxis, Laravel ein nobles Rahmen zu sein?

+2

keine Praxis schlecht oder gut, es gibt eine Zeit und einen Platz für alles –

+1

Well Unit-Tests dies ein richtigen Schmerzen wären. Das ist ein Grund, warum sie hier als schlecht angesehen werden. Aber es ist auch lesbar und prägnant. –

Antwort

28

statischer Zustand ist allgegenwärtig und zerstört völlig Testbarkeit, da Sie nicht nur den Zustand zurücksetzen. Darüber hinaus kann alles den Status in einer Weise beeinflussen, die von anderen Aspekten des Codes nicht vorhergesagt werden kann, was zu potenziell unvorhersehbarem Verhalten führen kann.

Laravel 4 verhindert dies durch statische Fassaden. Diese Fassaden sind "syntaktisch kurz für IoC-Auflösung". Sie liefern sowohl syntaktischen Zucker als auch einen eng gekoppelten Code.

Die Klassen, die von den Fassaden aufgelöst werden, können geändert werden und ermöglichen es Ihnen, Mock-Systeme oder was auch immer Sie wünschen, zu injizieren.

Natürlich bedeutet dies nicht wirklich den anderen Aspekt der statischen Zugriff lösen .. Welche, dass Sie ist nicht nur eine andere Funktionalität injizieren. Bei Laravel-Anwendungen haben Sie jedoch in der Regel keine Fassade in Ihrer Domäne. Es ist mehr für die Web-Transport-Schicht, wo es sehr hilfreich ist, da die Web-Transport-Schicht bereits eng mit Ihrem Framework gekoppelt ist, nutzt dies nur gut, indem Sie etwas Ähnliches wie DSL für diese Schicht Ihrer Anwendung erstellen.

ich wiederhole, bitte nicht Fassaden tief in Ihrer Domäne Schicht verwendet.