Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ukryty sens za Laravel Facades
Forum PHP.pl > Forum > PHP > Object-oriented programming
Skie
Witam,
właśnie zaczynam naukę Laravela i nie potrafię zrozumieć sensu korzystania ze statycznych fasad wewnątrz tego frameworka.

Fasady korzystają z referencji do obiektów zarejestrowanych wewnątrz kontenera IoC, które istotą jest zmiana kierunku przepływu dependency w aplikacji tak by wszystkie klasy miały na starcie wstrzykiwane zewnętrzne zależności, oraz by klasa w momencie startu była w pełni funkcjonalna. Z drugiej strony korzystanie ze statycznych fasad przywraca ten flow, do stanu gdzie zależności są 'pobierane' przez klasę po stworzeniu.

Oba te rozwiązania korzystają ze wzajemnie wykluczających się praktyk programistycznych, a same fasady odptytujące kontener IoC przypominają mi statyczny rejestr lub service localizator.

Czytając więcej na temat, czemu Laravel robi w ten sposób, znalazłem jedynie artykuł mówiący,że twórcy wybrali to rozwiązanie ze względu na uproszczenie dostępu do API jak i również uproszczeniu testowania aplikacji poprzez możliwość mockowania wspomnianych fasad, co już w tym momencie wydaje mi się złym podejściem w TDD, a także nie mówi nic o konkretnym problemie jakie fasady miałyby rozwiązać.

Może mi ktoś zatem wytłumaczyć, czemu tak odrębne, wręcz niwelujące nawzajem swoje zalety, wzorce są stosowane razem w Laravel?
by_ikar
Jedynym ukrytym sensem, jest ten który wymieniłeś, czyli uproszczony dostęp do API. Dlaczego CI czy kohana były tak lubiane? Właśnie przez swoją prostote, singleton jest tam wszędzie, i to jest taki łatwy próg wejścia dla początkujących. Tyle że tam miałeś tylko jedną rzecz do wyboru, w laravel nie musisz korzystać z fasad wcale, bo to wszystko co jest w fasadach, jest dostępne w kontenerze IoC.

Mnie też to początkowo dziwiło, kto przy IoC które wprowadził symfony chciałby korzystać z singletona? Dopiero potem zauważyłem że wcale z niego nie trzeba korzystać, chociaż jest taka możliwość.
Pyton_000
Sensu jako takiego nie ma, ot po prostu ułatwienie. A z drugiej strony z Fasadami i IoC kiepsko sobie radzą IDE z podpowiadaniem składni co skutkuje nauczeniem się co mamy dostępne. No chyba że to tylko ja taka łamaga jestem i nie umiem zmusić Storma do podpowiadania w L5 wink.gif

by_ikar
Aby zmusić phpstorma do fasad, musiałbyś zainstalować odpowiedni plugin, lub pobrać z gitchuba odpowiedni helper (zwykły plik php).

plugin: https://plugins.jetbrains.com/plugin/7532?pr=phpStorm (w repo z poziomu edytora też znajdziesz)
helper: https://gist.github.com/barryvdh/5227822

Nie wiem jak to ma się póki co do L5, bo czekam aż zostanie wydany wink.gif
Pyton_000
W L4 helper działa wyśmienicie, jednak po wgraniu samego plugina i próbie generowania niestety ale nie zadziała. Półśrodkiem jest wgranie wygenerowanego pliku php do projektu.
Autor tego helpera z tego co widziałem pracuje już nad wersją dla L5.

Co do pluginu dla storma to jakoś nie chciało mi to działać albo ja nie potrafiłem z niego korzystać wink.gif

[Edited]
Właśnie przetestowałem ponownie ten helper i w sumie generuje pliczek php, więc można powiedzieć że działa. Cudo wink.gif
Choć nie wiem czy w L5 jest to aż tak potrzebne mając do dyspozycji Method DI
by_ikar
Jak na szybkiego coś robisz z użyciem fasad, to może się przydać, ale tak jak mówisz, w L5, to nie ma sensu, a ja sam w sumie na poważnie chcę zacząć dopiero do L5, bo własnie wcześniej jakoś te fasady mi średnio leżały, a kiedy się już do nich powoli przekonywałem, to zobaczyłem co ma być w L4.5 (które później rebrandowali na 5) to się powstrzymałem i stwierdziłem że poczekam, bo niektóre z tych rozwiązań (jak chociażby httpRequests i filtrowania danych) są świetne i tylko czekam aż wyjdzie stable i już coś będę w tym trzaskać wink.gif
Skie
Dziękuję wszystkim za odpowiedzi smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.