![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
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? Ten post edytował Skie 4.01.2015, 22:55:15 -------------------- Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+ Strona Domowa | Elradia MMORPG FireFox: make the web better. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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ść. Ten post edytował by_ikar 5.01.2015, 12:48:51 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
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
![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
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ć ![]() [Edited] Właśnie przetestowałem ponownie ten helper i w sumie generuje pliczek php, więc można powiedzieć że działa. Cudo ![]() Choć nie wiem czy w L5 jest to aż tak potrzebne mając do dyspozycji Method DI Ten post edytował Pyton_000 5.01.2015, 13:45:08 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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ć
![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję wszystkim za odpowiedzi
![]() -------------------- Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+ Strona Domowa | Elradia MMORPG FireFox: make the web better. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 16:16 |