2013-02-26 17 views
10

Jestem bardzo zdezorientowany.Próbuję zrozumieć, dlaczego wiele statycznych metod Laravela nie jest uważane za złą praktykę.

Poprosiłem kilku programistów o Reddit, aby przejrzeli moje kody. To wygląda tak.

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

Tak więc ładuje register.php, zamienia {error_message} na tłumaczenie. (Przepraszamy, ta nazwa użytkownika jest w użyciu.) Wybierz inną.)

Powiedzieli, że używanie zbyt wielu połączeń statycznych jest złą praktyką. Mimo to sugerują framework Laravel, który całkowicie pozbywa się tego i używa statycznych wywołań.

Czy ktoś może mi wytłumaczyć, jak to się dzieje, jeśli jest to zła praktyka, a Laravel jest klasyczną strukturą?

+2

żadna praktyka nie jest zła ani dobra, jest czas i miejsce na wszystko. –

+1

Badanie jednostkowe to byłby właściwy ból. To jeden z powodów, dla których są tutaj źle traktowani. Ale jest również czytelny i zwięzły. –

Odpowiedz

28

Stan statyczny jest wszechobecny i całkowicie niszczy testowalność, ponieważ nie można po prostu zresetować stanu. Ponadto wszystko może wpłynąć na stan w sposób, którego inne aspekty kodu nie są w stanie przewidzieć, co może doprowadzić do nieprzewidywalnych zachowań.

Laravel 4 zapobiega temu przez użycie statycznych "fasad". Te fasady są "syntaktycznym skrótem dla rozdzielczości IoC". Zapewniają zarówno cukier syntaktyczny, jak i zapobiegają ściśle powiązanemu kodowi.

Klasy rozwiązywane przez fasady można zmieniać i umożliwiać wstrzykiwanie fałszywych systemów lub cokolwiek zechcesz.

Oczywiście, to naprawdę nie rozwiązuje innego aspektu dostępu statycznego. Co oznacza, że ​​nie można po prostu wstrzykiwać różnych funkcji. Jednak w przypadku aplikacji Laravel zazwyczaj nie używasz elewacji w swojej domenie. To jest bardziej dla warstwy transportu w Internecie, gdzie jest to bardzo pomocne, ponieważ warstwa transportu w Internecie jest już ściśle powiązana z twoją strukturą, to po prostu dobrze wykorzystuje ten fakt, tworząc coś zbliżonego do DSL dla tej warstwy aplikacji.

Powtarzam, proszę rozważyć niestosowanie elewacji głęboko w warstwie domeny.

Powiązane problemy