Dlaczego laravel jest do rzyci #10
Conversation
|
</ol> | ||
<p> | ||
Dlaczego w takim razie ktoś w ogóle używa Laravela? Z bardzo prostej przyczyny - Otwell zapewnia projektowi fenomenalny wręcz marketing, próg wejścia jest w zasadzie zerowy (najwyżej opakujesz kod proceduralny w statyczne metody), a do tego czas nas czasem goni... Co zrobić? Jak żyć? Nie używać Laravela do żadnych projektów, które potem będą musiały być przez dłuższy czas utrzymywane. Twoim celem jest zwiększenie sprzedaży piwa marki X w wakacje, wśród studentów? Zastanów się nad tym, czy nie byłoby warto użyć <a href="http://silex.sensiolabs.org/">Silexa</a> albo <a href="http://www.slimframework.com/">Slima</a>, a jeśli nie chcesz bądź po prostu musisz - to piszże w Laravelu.<br> | ||
Nigdy, przenigdy, nie używaj Laravela do projektów, które będą miały być utrzymywane przez wiele lat. Słaba architektura Cię wykończy zanim zdąży Cię wykończyć brak dobrych testów jednostkowych. |
norberttech
Jun 9, 2015
Nie jestem przekonany do takich stwierdzeń. To mimo wszystko jest subiektywna opinia.
Nie jestem przekonany do takich stwierdzeń. To mimo wszystko jest subiektywna opinia.
iwankgb
Jun 9, 2015
Author
Oczywiście, moja własna. Oparta na doświadczeniu w pracy (krótkiej, bo krótkiej) z Laravelem.
Oczywiście, moja własna. Oparta na doświadczeniu w pracy (krótkiej, bo krótkiej) z Laravelem.
norberttech
Jun 9, 2015
No właśnie, tylko że FAQ PHPers to raczej nie są doświadczenia i wnioski jednej osoby a raczej całego community. Poza tym ja się z tym stwierdzeniem nie zgadzam, framework to detal a detale nie mogą wyłożyć całego projektu.
No właśnie, tylko że FAQ PHPers to raczej nie są doświadczenia i wnioski jednej osoby a raczej całego community. Poza tym ja się z tym stwierdzeniem nie zgadzam, framework to detal a detale nie mogą wyłożyć całego projektu.
iwankgb
Jun 9, 2015
Author
Zapraszam serdecznie do przedstawienia wniosków innych członków społeczności. Na tyle konkretnych, że da się je ubrać w formę PR.
Z resztą Twojej wypowiedzi się nie zgadzam.
Zapraszam serdecznie do przedstawienia wniosków innych członków społeczności. Na tyle konkretnych, że da się je ubrać w formę PR.
Z resztą Twojej wypowiedzi się nie zgadzam.
kallosz
Jun 10, 2015
wydaje mi się jednak że te detale jak najbardziej mogą być odpowiedzialne za wyłożenie aplikacji.
wydaje mi się jednak że te detale jak najbardziej mogą być odpowiedzialne za wyłożenie aplikacji.
norberttech
Jun 10, 2015
To czy mogą czy nie mogą jest dyskusja na osobny wątek.
Jako społeczność nie powinniśmy przyjmować żadnego stanowiska a zamiast tego obiektywnie pokazać wady (których jest więcej) i zalety (których praktycznie nie ma).
Załóżmy, że ten PR zostanie zmergowany w formie bez personalnych wniosków. Dzięki temu damy możliwość zrobienia PR'a z zaletami korzystania z tego "frameworka", dajmy ludziom wybór na podstawie rzetelnych informacji zamiast narzucać im własne zdanie.
To czy mogą czy nie mogą jest dyskusja na osobny wątek.
Jako społeczność nie powinniśmy przyjmować żadnego stanowiska a zamiast tego obiektywnie pokazać wady (których jest więcej) i zalety (których praktycznie nie ma).
Załóżmy, że ten PR zostanie zmergowany w formie bez personalnych wniosków. Dzięki temu damy możliwość zrobienia PR'a z zaletami korzystania z tego "frameworka", dajmy ludziom wybór na podstawie rzetelnych informacji zamiast narzucać im własne zdanie.
iwankgb
Jun 10, 2015
Author
@norzechowicz - co jest osobistym wnioskiem wg Twoich kryteriów? Jeśli to co piszę opieram o własne doświadczenie, to w zasadzie wszystkie te wnioski są mniej lub bardziej osobiste.
@norzechowicz - co jest osobistym wnioskiem wg Twoich kryteriów? Jeśli to co piszę opieram o własne doświadczenie, to w zasadzie wszystkie te wnioski są mniej lub bardziej osobiste.
norberttech
Jun 10, 2015
Słaba architektura Cię wykończy zanim zdąży Cię wykończyć brak dobrych testów jednostkowych.
To jest osobisty wniosek w dodatku niesłuszny.
Słaba architektura Cię wykończy zanim zdąży Cię wykończyć brak dobrych testów jednostkowych.
To jest osobisty wniosek w dodatku niesłuszny.
<ul id="frameworki" class="cd-faq-group"> | ||
<li class="cd-faq-title"><h2>Frameworki</h2></li> | ||
<li> | ||
<a class="cd-faq-trigger" href="#0">Dlaczego hejtujemy Laravela?</a> |
norberttech
Jun 9, 2015
W zasadzie to nie hejtujemy bo nie można nazwać hejtem powiedzenia, że białe jest białe a czarne jest czarne.
W zasadzie to nie hejtujemy bo nie można nazwać hejtem powiedzenia, że białe jest białe a czarne jest czarne.
iwankgb
Jun 9, 2015
Author
Wpis na temat Laravela ma charakter popularyzatorski i utrzymany jest w lekkim tonie ;)
Wpis na temat Laravela ma charakter popularyzatorski i utrzymany jest w lekkim tonie ;)
norberttech
Jun 9, 2015
Wpis na temat Laravela powinien jednak dostosować się do pozostałych wpisów.
Wpis na temat Laravela powinien jednak dostosować się do pozostałych wpisów.
iwankgb
Jun 9, 2015
Author
Być może znaczy to tyle, że wpis ten w takiej formie nie nadaje się do tego FAQ.
Być może znaczy to tyle, że wpis ten w takiej formie nie nadaje się do tego FAQ.
iwankgb
Jun 9, 2015
Author
Dobra - ponieważ ten wpis ma zasadniczo inny charakter, to proszę o jakieś bardziej szczegółowe informacje czego oczekujecie. Od koncepcji listy nie odejdę, bo pozwala ona krótko i zwięźle przedstawić zarzuty/wady/zalety.
Ma być na bardo poważnie i w stylu manuala?
Dobra - ponieważ ten wpis ma zasadniczo inny charakter, to proszę o jakieś bardziej szczegółowe informacje czego oczekujecie. Od koncepcji listy nie odejdę, bo pozwala ona krótko i zwięźle przedstawić zarzuty/wady/zalety.
Ma być na bardo poważnie i w stylu manuala?
iwankgb
Jun 9, 2015
Author
@efik - wydaje mi się, że lepiej odsyłać do fejsa w "przypisach" niż po prostu wrzucać linki tamże. Głównie dlatego, że tam znajdzie się zawsze (albo prawie zawsze) jakiś flejm, a zaproponowana przeze mnie forma wskazuje na słabości i ewentualnie odsyła do dyskusji na ich temat.
@efik - wydaje mi się, że lepiej odsyłać do fejsa w "przypisach" niż po prostu wrzucać linki tamże. Głównie dlatego, że tam znajdzie się zawsze (albo prawie zawsze) jakiś flejm, a zaproponowana przeze mnie forma wskazuje na słabości i ewentualnie odsyła do dyskusji na ich temat.
norberttech
Jun 10, 2015
Też nie jestem przekonany do wrzucania linków do grupy na fejsie, lepiej wyciągnąć najlepsze kawałki, zapytać autorów o zdanie i zmontować z tego wpis do FAQ.
Też nie jestem przekonany do wrzucania linków do grupy na fejsie, lepiej wyciągnąć najlepsze kawałki, zapytać autorów o zdanie i zmontować z tego wpis do FAQ.
leafnode
Jun 10, 2015
Contributor
Problem z linkowaniem do fejsa jest taki, że dyskusje na fejsie mogą zniknąć dosyć łatwo i szybko.
Problem z linkowaniem do fejsa jest taki, że dyskusje na fejsie mogą zniknąć dosyć łatwo i szybko.
<a class="cd-faq-trigger" href="#0">Dlaczego hejtujemy Laravela?</a> | ||
<div class="cd-faq-content"> | ||
<p> | ||
Ja, piszący te słowa, pracowałem przez dwa miesiące z Laravelem i mója do niego niechęć nie opiera się na zawiści wobec Taylora Otwella. |
norberttech
Jun 9, 2015
To w sumie nie jest istotne.
To w sumie nie jest istotne.
iwankgb
Jun 9, 2015
Author
IMHO jest - fakt, że pracowałem z Laravelem pozwala mi oceniać jego słabości od środka, a nie tylko przez pryzmat chujowej architektury.
IMHO jest - fakt, że pracowałem z Laravelem pozwala mi oceniać jego słabości od środka, a nie tylko przez pryzmat chujowej architektury.
norberttech
Jun 9, 2015
Tylko, że FAQ PHPers to nie "prywatne odczucia Maćka" a raczej źródło informacji, bez sprecyzowanego autora.
Tylko, że FAQ PHPers to nie "prywatne odczucia Maćka" a raczej źródło informacji, bez sprecyzowanego autora.
Nigdy, przenigdy, nie używaj Laravela do projektów, które będą miały być utrzymywane przez wiele lat. Słaba architektura Cię wykończy zanim zdąży Cię wykończyć brak dobrych testów jednostkowych. | ||
</p> | ||
<p> | ||
Na koniec niestety przypomniałem sobie, że <a href="https://github.com/laravel/framework/pull/4824">korzystanie z DI</a> też potrafi skrócić życie. Bardzo długo szukałem w kodzie PHPowym zmiennej $driver przekazywanej do konstruktora, a ona sobie spokojnie żyła <a href="https://devel-m6w6.rhcloud.com/mdref/http/Client/__construct">w C</a>. |
norberttech
Jun 9, 2015
W sumie zmieniłbym formę wypowiedzi, zamiast pisać to jako rozmowę z czytającym IMO bardziej merytocznie byłoby po prostu zrobić listę ułomność Laravela.
W sumie zmieniłbym formę wypowiedzi, zamiast pisać to jako rozmowę z czytającym IMO bardziej merytocznie byłoby po prostu zrobić listę ułomność Laravela.
iwankgb
Jun 9, 2015
Author
Tam jest dość konkretna lista ułomności. Forma ma jeden cel - ułatwić użytkownikowi zrozumienie mojego przekazu i uważam, że ją to usprawiedliwia.
Tam jest dość konkretna lista ułomności. Forma ma jeden cel - ułatwić użytkownikowi zrozumienie mojego przekazu i uważam, że ją to usprawiedliwia.
norberttech
Jun 9, 2015
Forma dla całego FAQ powinna być spójna.
Forma dla całego FAQ powinna być spójna.
adampiotrowski
Jun 10, 2015
@iwankgb Nie, to cały czas dość mocno personalna wycieczka po Laravel. Fakt że podajesz mocne (i pewnie dla większości wystarczające) argumenty, ale jak dla mnie forma nie jest odpowiednia. Widziałbym to raczej na jakimś blogu.
Moim zdaniem każdy powinien wyciągnąć odpowiednie wnioski, programowaniem raczej nie zajmują się kompletni idioci bez zdolności analitycznych ;), a zadaniem FAQ jest tak naprawdę wskazanie odpowiednich źródeł. Wydaje mi się że lepiej tutaj sprawdzi się forma wypunktowania konkretnych ułomności z bardzo konkretnymi przykładami.
Nie leciałbym tutaj w coś takiego jak napisał Ocramius, nie ma sensu duplikować, ale na pewno warto zalinkować z wyjaśnieniem kim on jest i czym się zajmuje. https://gist.github.com/anonymous/8565929
@iwankgb Nie, to cały czas dość mocno personalna wycieczka po Laravel. Fakt że podajesz mocne (i pewnie dla większości wystarczające) argumenty, ale jak dla mnie forma nie jest odpowiednia. Widziałbym to raczej na jakimś blogu.
Moim zdaniem każdy powinien wyciągnąć odpowiednie wnioski, programowaniem raczej nie zajmują się kompletni idioci bez zdolności analitycznych ;), a zadaniem FAQ jest tak naprawdę wskazanie odpowiednich źródeł. Wydaje mi się że lepiej tutaj sprawdzi się forma wypunktowania konkretnych ułomności z bardzo konkretnymi przykładami.
Nie leciałbym tutaj w coś takiego jak napisał Ocramius, nie ma sensu duplikować, ale na pewno warto zalinkować z wyjaśnieniem kim on jest i czym się zajmuje. https://gist.github.com/anonymous/8565929
Ja, piszący te słowa, pracowałem przez dwa miesiące z Laravelem i moja do niego niechęć nie opiera się na zawiści wobec Taylora Otwella. | ||
</p> | ||
<p> | ||
Laravel używa biblioteki o nazwie Eloquent, która ma być ORM, a tak naprawdę jest to Active Record. Doświadczenia z Eloquentem mam następujące: |
llubosz
Jun 9, 2015
Contributor
Nie jest, a implementuje
Nie jest, a implementuje
|
||
</ol> | ||
<p> | ||
Występują też w przyrodzie zjawiska, których po prostu nie rozumiem: |
llubosz
Jun 9, 2015
Contributor
W jakiej przyrodzie i skoro Ty nie rozumiesz, to być może ktoś inny zrozumie
W jakiej przyrodzie i skoro Ty nie rozumiesz, to być może ktoś inny zrozumie
Hm, chciałem się odnieść do szczegółów, ale chyba to bez sensu. Wydaje mi się, że wpis jest bardzo subiektywny, co w FAQ nie powinno się znaleźć. Laravel nie jest szczytem osiągnięć architektury oprogramowania, ale w ten sam sposób powinniśmy opisać każdy przypadek użycia PHP analizując jego wady i zalety. Imho - bez sensu. |
PR został w dużej mierze przebudowany. |
<li>Alternatywą dla Dependency Injection są <a href="http://laravel.com/docs/5.1/facades">Fasady</a>. Ich nadużywanie prowadzi do sytuacji, w której trudno jest określić zależności danej klasy. Planowane jest wprowadzenie funkcjonalności pozwalającej na <a href="http://laravel.com/docs/master/blade#service-injection">dostęp do serwisów z poziomu template'ów.</a></li> | ||
<li>Ze względu na Fasady w <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Facades/Facade.php#L42">produkcyjnym kodzie</a> znajdują się metody służące wyłącznie testowaniu.</li> | ||
<li>Zapisywanie obiektu do bazy realizowane jest za pomocą <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Model.php#L1185">statycznej metody save()</a>, której mockowanie w testach jednostkowych jest mocno utrudnione.</li> | ||
<li>Przykładem nadużywanie statycznego dostępu jest klasa odpowiedzialna za <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Str.php">operacje na ciągach znaków</a>.</li> |
W trakcie rozmowy z @Flashek na #mikolow powstała koncepcja omówienia tego (i innych podobnych wpisów) na PHPConie. Jak mają wyglądać, jak ma wyglądać proces decyzyjny dotyczący odrzucania bądź akceptowania takich zmian itp, itd. |
</ul> <!-- cd-faq-group --> | ||
</ul> | ||
<ul id="frameworki" class="cd-faq-group"> | ||
<li class="cd-faq-title"><h2>Frameworki</h2></li> |
norberttech
Jun 11, 2015
To nie powinno być "Wady i zalety wybranych Frameworków" ?
To nie powinno być "Wady i zalety wybranych Frameworków" ?
leafnode
Jun 11, 2015
Contributor
Nie koniecznie - może o innym fw będziemy pisać same zalety :]
Nie koniecznie - może o innym fw będziemy pisać same zalety :]
norberttech
Jun 11, 2015
Nie ma frameworków, które mają same zalety :D
Nie ma frameworków, które mają same zalety :D
<ul id="frameworki" class="cd-faq-group"> | ||
<li class="cd-faq-title"><h2>Frameworki</h2></li> | ||
<li> | ||
<a class="cd-faq-trigger" href="#0">Laravel</a> |
norberttech
Jun 11, 2015
"Laravel - Wady" ?
"Laravel - Wady" ?
leafnode
Jun 11, 2015
Contributor
👍 - wady, zarzuty, cokolwiek informującego, że to nie jest opis całego fw, a tylko odpowiedź na pytanie "co wy się tak tego lrv czepiacie"
<div class="cd-faq-content"> | ||
<p>Eloquent (dostęp do bazy danych):</p> | ||
<ol> | ||
<li>Dostępne są dwa query buildery: użycie <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php">pierwszego z nich</a> powoduje zwrócenie obiektów Active Record, natomiast <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Query/Builder.php">drugi</a> zwraca tablice.</li> |
norberttech
Jun 11, 2015
To na pewno jest wada? Doctrine też pozwala wykonać query żeby zwróciło tablicę lub obiekty. Fakt, to powinna być opcja i hydrator a nie builder osobny ale samo istnienie dwóch builderów nie wydaje mi się jakoś tragiczne.
To na pewno jest wada? Doctrine też pozwala wykonać query żeby zwróciło tablicę lub obiekty. Fakt, to powinna być opcja i hydrator a nie builder osobny ale samo istnienie dwóch builderów nie wydaje mi się jakoś tragiczne.
iwankgb
Jun 11, 2015
Author
Uważam, że to wada, bo zapytania są takie same bez względu na formę, w której zwrócone są wyniki.
Uważam, że to wada, bo zapytania są takie same bez względu na formę, w której zwrócone są wyniki.
norberttech
Jun 11, 2015
Co z tego? Doctrine też generuje takie same zapytanie niezależnie jaką strategię hydracij wybierzesz.
Co z tego? Doctrine też generuje takie same zapytanie niezależnie jaką strategię hydracij wybierzesz.
iwankgb
Jun 12, 2015
Author
Norbercie, zapytania z query buildera ORMowego i DBALowego są zupełnie inne (a o takiej różnicy właśnie mówimy w przypadku Laravela - "ORM" i surowe zapytania). Zauważ też, że żaden z builderów doctrine'owych nie zwraca encji - encje może zwrócić co najwyżej repozytorium (w przypadku Laravela jest to odpowiedzialność query buildera - np. https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php#L75). Bardziej sensownie będzie chyba faktycznie położyć akcent w tym miejscu: zadaniem query buildera jest budowanie zapytań, a nie hydrowanie obiektów.
Norbercie, zapytania z query buildera ORMowego i DBALowego są zupełnie inne (a o takiej różnicy właśnie mówimy w przypadku Laravela - "ORM" i surowe zapytania). Zauważ też, że żaden z builderów doctrine'owych nie zwraca encji - encje może zwrócić co najwyżej repozytorium (w przypadku Laravela jest to odpowiedzialność query buildera - np. https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php#L75). Bardziej sensownie będzie chyba faktycznie położyć akcent w tym miejscu: zadaniem query buildera jest budowanie zapytań, a nie hydrowanie obiektów.
norberttech
Jun 12, 2015
https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php to nie jest query builder - to jest jakiś tam Eloquent builder. To jest https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Query/Builder.php query builder i on faktycznie nie powinien wykonywać query tylko je budować (tworzyć -> uzupełniać -> zwracać).
Co do Dotrine to nie mieszajmy w to DBAL'a. Te przypadki nie są w ogóle do siebie podobne. Encji nie zwraca repozytorium tylko hydrator wywołany na query podczas wykonywania getResults. Samo query natomiast można zbudować QueryBuilderem. Jednak niezależnie od tego jaką strategię hydracji wyników wybierzesz samo zapytanie do bazy się nie zmieni, hydracja wykonuje się na pobranych danych a nie na zapytaniu.
https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php to nie jest query builder - to jest jakiś tam Eloquent builder. To jest https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Query/Builder.php query builder i on faktycznie nie powinien wykonywać query tylko je budować (tworzyć -> uzupełniać -> zwracać).
Co do Dotrine to nie mieszajmy w to DBAL'a. Te przypadki nie są w ogóle do siebie podobne. Encji nie zwraca repozytorium tylko hydrator wywołany na query podczas wykonywania getResults. Samo query natomiast można zbudować QueryBuilderem. Jednak niezależnie od tego jaką strategię hydracji wyników wybierzesz samo zapytanie do bazy się nie zmieni, hydracja wykonuje się na pobranych danych a nie na zapytaniu.
iwankgb
Jun 12, 2015
Author
Norbercie - nie "jakis tam", tylko jeden z dostępnych w projekcie i ściśle (oraz bardzo źle) połączony z drugim. Zgadzam się w pełni z tym, że należy to zdanie przeformułować i położyć nacisk na to, że jeden z nich pełni rolę repozytorium. Pasuje?
Norbercie - nie "jakis tam", tylko jeden z dostępnych w projekcie i ściśle (oraz bardzo źle) połączony z drugim. Zgadzam się w pełni z tym, że należy to zdanie przeformułować i położyć nacisk na to, że jeden z nich pełni rolę repozytorium. Pasuje?
norberttech
Jun 12, 2015
Nie pełni roli repozytorium. Właśnie problem w tym, że nie wiadomo jaką "to coś" rolę pełni albo jaką próbuje pełnić. Wygląda mi to na coś w rodzaju Data Access Object, który wewnętrznie korzysta z QueryBuilder, który z kolei nie jest nawet builderem, po prostu implementuje fluent interface co jeszcze nie robi z niego buildera. Swaglor widzę nie tylko Fasady od Proxy nie odróżnia ale też myśli, że jak coś zwraca w każdej metodzie $this to jest builderem.
Nie pełni roli repozytorium. Właśnie problem w tym, że nie wiadomo jaką "to coś" rolę pełni albo jaką próbuje pełnić. Wygląda mi to na coś w rodzaju Data Access Object, który wewnętrznie korzysta z QueryBuilder, który z kolei nie jest nawet builderem, po prostu implementuje fluent interface co jeszcze nie robi z niego buildera. Swaglor widzę nie tylko Fasady od Proxy nie odróżnia ale też myśli, że jak coś zwraca w każdej metodzie $this to jest builderem.
</ol> | ||
<p>Dostęp statyczny:</p> | ||
<ol> | ||
<li>W Laravelu dostępny jest moduł Dependency Injection oparty o Reflection i <a href="http://laravel.com/docs/5.1/container#resolving">mogący działać bez żadnej konfiguracji</a>. Znajdowały się w nim pewne <a href="https://github.com/laravel/framework/pull/4824">niedoskonałości</a> mogące skutecznie utrudnić debugowanie.</li> |
norberttech
Jun 11, 2015
Znajdowały się w nim pewne...
Skoro się już nie znajdują to po co o nich pisać?
Znajdowały się w nim pewne...
Skoro się już nie znajdują to po co o nich pisać?
iwankgb
Jun 11, 2015
Author
Bo daje to pojęcie o jakości projektu.
Bo daje to pojęcie o jakości projektu.
norberttech
Jun 11, 2015
Gdyby PR nie został zmergowany można by było użyć takiego argumentu.
Gdyby PR nie został zmergowany można by było użyć takiego argumentu.
iwankgb
Jun 14, 2015
Author
Nie piszę, że Taylor nie merdżuje PRów. Zwracam uwagę na to, że nawet te fragmenty kodu, które wydają się być dość sensowne mają zwyczaj być niedopracowane.
Nie piszę, że Taylor nie merdżuje PRów. Zwracam uwagę na to, że nawet te fragmenty kodu, które wydają się być dość sensowne mają zwyczaj być niedopracowane.
<li>W Laravelu dostępny jest moduł Dependency Injection oparty o Reflection i <a href="http://laravel.com/docs/5.1/container#resolving">mogący działać bez żadnej konfiguracji</a>. Znajdowały się w nim pewne <a href="https://github.com/laravel/framework/pull/4824">niedoskonałości</a> mogące skutecznie utrudnić debugowanie.</li> | ||
<li>Alternatywą dla Dependency Injection są <a href="http://laravel.com/docs/5.1/facades">Fasady</a>. Ich nadużywanie prowadzi do sytuacji, w której trudno jest określić zależności danej klasy. Planowane jest wprowadzenie funkcjonalności pozwalającej na <a href="http://laravel.com/docs/master/blade#service-injection">dostęp do serwisów z poziomu template'ów.</a></li> | ||
<li>Ze względu na Fasady w <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Facades/Facade.php#L42">produkcyjnym kodzie</a> znajdują się metody służące wyłącznie testowaniu.</li> | ||
<li>Zapisywanie obiektu do bazy realizowane jest za pomocą <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Model.php#L1185">statycznej metody save()</a>, której mockowanie w testach jednostkowych jest mocno utrudnione.</li> |
norberttech
Jun 11, 2015
Ale po co w testach jednostkowych mockować save? To już mi śmierdzi testami integracyjnymi a nie jednostkowymi. Jeżeli te modele AR potraktujesz jako DAO, tego problemu nie ma.
Ale po co w testach jednostkowych mockować save? To już mi śmierdzi testami integracyjnymi a nie jednostkowymi. Jeżeli te modele AR potraktujesz jako DAO, tego problemu nie ma.
iwankgb
Jun 11, 2015
Author
Np. w celu zbudowania złożonych relacji w bazie; musisz zapisać jeden obiekt, żeby inny mógł być w relacji do niego.
Np. w celu zbudowania złożonych relacji w bazie; musisz zapisać jeden obiekt, żeby inny mógł być w relacji do niego.
norberttech
Jun 11, 2015
I to jest Twoim zdaniem testowane w testach jednostkowych?
I to jest Twoim zdaniem testowane w testach jednostkowych?
iwankgb
Jun 12, 2015
Author
Przede wszystkim uważam, że nie jest to przedmiotem tego PRa. Będę bardzo zobowiązany jeśli zechcesz wrócić do meritum.
Przede wszystkim uważam, że nie jest to przedmiotem tego PRa. Będę bardzo zobowiązany jeśli zechcesz wrócić do meritum.
norberttech
Jun 12, 2015
Nie możesz nazwać wadą frameworka, to że źle go używasz - to jest meritum. O ile sama statyczna metoda ::save jest zła tak argumentacja w tym przypadku dlaczego tak jest też nie jest o wiele lepsza.
Nie możesz nazwać wadą frameworka, to że źle go używasz - to jest meritum. O ile sama statyczna metoda ::save jest zła tak argumentacja w tym przypadku dlaczego tak jest też nie jest o wiele lepsza.
iwankgb
Jun 12, 2015
Author
Norbercie, nie uważam, żebym go źle używał. Jeśli chcesz prowadzić dyskusję na ten temat, to zapraszam: mail, Facebook, Twitter. Ja się z Tobą po prostu nie zgadzam i nie zamierzam zmieniać tego fragmentu.
Norbercie, nie uważam, żebym go źle używał. Jeśli chcesz prowadzić dyskusję na ten temat, to zapraszam: mail, Facebook, Twitter. Ja się z Tobą po prostu nie zgadzam i nie zamierzam zmieniać tego fragmentu.
norberttech
Jun 12, 2015
Masz takie prawo, ja natomiast nie zgadzam się z argumentacją jaką przedstawiłeś, jest niejasna, najprawdopodobniej problemy, które napotkałeś są wynikiem braku odpowiedniej warstwy abstrakcji co uniemożliwiło Ci napisanie odpowiednich testów - moim zdaniem to dyskwalifikuje ten wpis.
Masz takie prawo, ja natomiast nie zgadzam się z argumentacją jaką przedstawiłeś, jest niejasna, najprawdopodobniej problemy, które napotkałeś są wynikiem braku odpowiedniej warstwy abstrakcji co uniemożliwiło Ci napisanie odpowiednich testów - moim zdaniem to dyskwalifikuje ten wpis.
iwankgb
Jun 13, 2015
Author
Norbercie, warstwa abstrakcji (czy raczej to co sie za nia kryje) tez musi mieć jakieś testy. Prędzej czy później dojdziesz do momentu, w którym zawolasz persist() albo save(). Oczywiście - może być to test funkcjonalny (tak by pewnie sugerowała Clean Architecture).
Uważam wszakże, ze pisanie zawsze kodu doskonale oderwanego od frameworka, jest działaniem niepotrzebnym. W pewnych sytuacjach wręcz niemożliwym (sam wspominales o CA i Laravelu w ostatni poniedziałek w Gdańsku)
W imię zasad to Franz Maurer kolegę zastrzelił i nic dobrego z tego nie wyniknelo ;)
Pozdrawiam/Regards,
Iwan.
Norbercie, warstwa abstrakcji (czy raczej to co sie za nia kryje) tez musi mieć jakieś testy. Prędzej czy później dojdziesz do momentu, w którym zawolasz persist() albo save(). Oczywiście - może być to test funkcjonalny (tak by pewnie sugerowała Clean Architecture).
Uważam wszakże, ze pisanie zawsze kodu doskonale oderwanego od frameworka, jest działaniem niepotrzebnym. W pewnych sytuacjach wręcz niemożliwym (sam wspominales o CA i Laravelu w ostatni poniedziałek w Gdańsku)
W imię zasad to Franz Maurer kolegę zastrzelił i nic dobrego z tego nie wyniknelo ;)
Pozdrawiam/Regards,
Iwan.
<li><a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php">Eloquent\Builder</a> nie dziedziczy po <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Query/Builder.php">Query\Builder</a>. W zamian metoda <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php#L920">__call()</a> powoduje wywoływanie metod nieistniejących w Eloquent\Builder na <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Database/Eloquent/Builder.php#L17">właściwości</a> tej klasy będącej instancją Query\Builder.</li> | ||
<li>W podobny sposób działa <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Auth/AuthManager.php">AuthManager</a>, który pozwala niejawnie <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Manager.php#L137">wykonywać</a> dzialanie na <a href="http://laravel.com/docs/5.0/authentication#retrieving-the-authenticated-user">klasie</a>, której instancja jest elementem <a href="https://github.com/laravel/framework/blob/v5.0.32/src/Illuminate/Support/Manager.php#L27">tablicy</a> będącej jego właściwością. <a href="">Dyskusja</a></li> | ||
<li>Opisane powyżej podejście znacznie utrudnia debugowanie i zrozumienie wewnętrznych mechanizmów frameworka.</li> | ||
</ol> |
norberttech
Jun 11, 2015
https://github.com/laravel/framework/blob/5.1/src/Illuminate/Support/helpers.php - to też bym gdzieś wrzucił
https://github.com/laravel/framework/blob/5.1/src/Illuminate/Support/helpers.php - to też bym gdzieś wrzucił
iwankgb
Jun 14, 2015
Author
Dorzuciłem. Bo jest ładniejsze niż się na pierwszy rzut oka wydaje.
Dorzuciłem. Bo jest ładniejsze niż się na pierwszy rzut oka wydaje.
Myślę, że warto byłoby też dodać przy każdym punkcie, których wersji Laravela dotyczy. |
@norzechowicz - jest wersja. |
Najwyższy czas :D |
Jo, już zerowe jest moje zainteresowanie tymi problemami :D aż się zdziwiłem, że takie coś jeszcze w ogóle wisiało. Jak to się człowiek uspokoił I nabrał dystansu przez 5 lat :D |
Zgodnie z prośbą, którą Leszek złożył na fejsie: oto i pull request do PHPersowego FAQ tłumaczący dlaczego Laravel to zło.