![]() ![]() |
Post
#101
|
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%)
|
Pyton_000 Wtedy już to nie jest klasa abstrakcyjna, co z tego że dopiszesz sobie słówko abstract i kod zadziała jak to jest niezgodne ze sztuka. Wiem ze tak się czasem robi ale to nagięcie zasady jej istnienia.
http://php.pl/Wortal/Artykuly/PHP/Podstawy...ne-i-interfejsy Opisany prze Ciebie przypadek owszem jest ale: Cytat Klasa abstrakcyjna w Javie nie musi posiadać metod czysto wirtualnych aby być abstrakcyjną, jednak takie użycie klasy abstrakcyjnej określa klasę jako nieinstancjowalną i jest rzadziej spotykane.
Ten post edytował com 14.01.2017, 13:52:40 |
|
|
|
Post
#102
|
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
Jest klasa abstrakcyjna bo nadal nie możesz zrobić z niej instancji. Owszem debilne jest to rozwiązanie że nie musi mieć metod ale jest. Jest i działa. Ba nawet coś takiego zadziała:
Ten post edytował Pyton_000 14.01.2017, 13:57:54 |
|
|
|
Post
#103
|
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%)
|
owszem zgadzam się z Tobą, ale lepiej tego unikać (IMG:style_emoticons/default/biggrin.gif)
|
|
|
|
Post
#104
|
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
Uważaj nie zgadzaj się tak publicznie bo wykorzystają to przeciwko Tobie (IMG:style_emoticons/default/biggrin.gif)
|
|
|
|
Post
#105
|
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 12 Dołączył: 17.09.2014 Skąd: Krasnystaw Ostrzeżenie: (0%)
|
No dobra a weźmy takie coś:
a)
vs. (IMG:style_emoticons/default/cool.gif)
no i w końcu
który z przypadków a) albo (IMG:style_emoticons/default/cool.gif) jest właściwy (zgodny ze sztuką)? Tutaj zakładam że każdy z uploaderów ma tak samo nazywającą się metodę execute. Ten post edytował daro0 14.01.2017, 15:29:14 |
|
|
|
Post
#106
|
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%)
|
Cytat Tam masz interfejs wiec zapisujesz do czegokolwiek co implementuje ten interfejs. Przecież nie zrobię Ci gotowca, ja tylko wskazałem drogę która masz iść, Zmiana kodowania,nazwy itd to będą kolejne dekoratory, które sobie dopiszesz w miarę potrzeb. Zdecyduj się czy zmiana nazwy i kodowania mają być wstrzykiwane, czy dodawane jako dekoratory, bo wcześniej pisałeś, żeby je wstrzykiwać i ciekawe jak zdecydujesz w klasie Upload, którą metodę użyjesz ze wstrzykniętego obiektu, skoro masz tam 5 metod, co użyjesz wszystkich, czy jednej, a jak będziesz chciał użyć innej, to będziesz edytował klasę Upload? Jaki to ma sens? Cytat Upload to klasa bazowa, a SessionStorage wgl nie ma znaczenia dla dekoratora. Bo to jest zależność wstrzykiwana do Upload, dlatego możesz wstawić dowolny storage jaki sobie wymarzysz, warunek jest tylko taki musi implementować zdefiniowany interfejs. Ma znaczenie, bo musisz za każdym razem wrzucić do UploadImage coś co implementuje interfejs z kontruktora, a nie zawsze jest taka potrzeba. Cytat Owszem klasa abstrakcyjna może posiadać definicje jakiś wspólnych metod ale musi posiadać co najmniej jedną metodę abstrakcyjną, żeby można było ja nazwać klasa abstrakcyjna, inaczej to jest zwykła klasa. To są podstawy programowania obiektowego. Klasa abstrakcyjna ma to do siebie, że oprócz metod abstrakcyjnych, które się w niej dodaje, nie daje możliwości stworzenia z niej bezpośrednio obiektu. Dopiero z klasy dziedziczącej po klasie abstrakcyjnej, można stworzyć obiekt. Dlatego właśnie klasy abstrakcyjne w moim rozwiązaniu nie posiadają konstruktorów, a gotowe metody, które funkcjonują dopiero po odpowiednim zdefiniowaniu konstruktorów klas dziedziczących. Więc nie chodzi o to: Cytat Pyton_000 Wtedy już to nie jest klasa abstrakcyjna, co z tego że dopiszesz sobie słówko abstract i kod zadziała jak to jest niezgodne ze sztuka. Wiem ze tak się czasem robi ale to nagięcie zasady jej istnienia. żeby dopisać słówko abstract, tylko, żeby nie można było stworzyć z niej obiektu, bo bez konstruktora jest bezużyteczna. Mam nadzieję, że wyjaśniłem. Cytat Jest klasa abstrakcyjna bo nadal nie możesz zrobić z niej instancji. Owszem debilne jest to rozwiązanie że nie musi mieć metod ale jest Zwykła klasa też nie musi mieć metod i co to też jest debilne? Na koniec chcę dodać, że ten kod jest łatwiejszy do zrozumienia, ale trudniejszy do rozbudowy, dodasz parę rzeczy i zrobi się bagno. Ten post edytował Omenomn 14.01.2017, 16:59:36 |
|
|
|
Post
#107
|
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 12 Dołączył: 17.09.2014 Skąd: Krasnystaw Ostrzeżenie: (0%)
|
No rozpacz.
Omenomn 1. Czemu ciągle upierasz się przy swoich racjach i nie dasz sobie wytłumaczyć jak to dobrze (i praktycznie) jako to wydaje mi się com tutaj przedstawił rozwiązanie problemu? 2. Jak długo i przy jakich projektach siedzisz i czy jest to praca zespołowa czy też samodzielna? 3. Ja pracuję samodzielnie i te sprawy związane z elastycznością i rozszerzalnością rozumiem inaczej, ze względu na specyficzną architekturę frameworka i np. ten CFS. Akurat jestem w trakcie tworzenia pewnego serwisu (i to nie małego) i pomimo tego że kod (gdybym Ci pokazał choć fragmenty) to w Twoim mniemaniu byłby syfem, to ja w tym syfie bardzo dobrze się odnajduję i nie mam żadnych problemów z rozszerzaniem czy refaktoryzacją. (IMG:style_emoticons/default/smile.gif) Co nie znaczy że Tobie albo komu innemu by się pracowało dobrze. 4. Do tego samego problemu są różne podejścia. Przejrzyj sobie jak ten Upload można robić przy użyciu wszystkich znanych frameworków PHP, w Wordpressie czy innych rozwiązaniach. Co FW to specyficzne podejście które nie każdemu pasuje (co też widać często po tym hejcie po Laravelu (IMG:style_emoticons/default/smile.gif) 5. Ciekawe jak wygląda praca w zespole gdzie każdy upiera się przy swoich racjach i ile może trwać realizacja projektu, który przy zgraniu można by zrealizować np. w 3 miesiące? O ile w ogóle się powiedzie. I nie chodzi mi tu tylko o backend ale np. ktoś jest frontendowcem a ty robisz w backendzie ale są pewne niezgodności bo upieracie się przy swoich rozwiązaniach (IMG:style_emoticons/default/smile.gif) Ten post edytował daro0 14.01.2017, 16:42:29 |
|
|
|
Post
#108
|
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%)
|
Cytat Zdecyduj się czy zmiana nazwy i kodowania mają być wstrzykiwane, czy dodawane jako dekoratory, bo wcześniej pisałeś, żeby je wstrzykiwać i ciekawe jak zdecydujesz w klasie Upload, którą metodę użyjesz ze wstrzykniętego obiektu, skoro masz tam 5 metod, co użyjesz wszystkich, czy jednej, a jak będziesz chciał użyć innej, to będziesz edytował klasę Upload? Jaki to ma sens? Niczego nie miałbym edytować bo jako parametr ma interfejs a nie implementacje, wiec ta klasa ma dowolna definicje, zgodna jedynie z interfejsem po którym dziedziczy, ale dałem Ci potem przykład, ze równie dobrze te zależności mogą być dekoratorami bo zmieniają oryginalny obiekt. Cytat Ma znaczenie, bo musisz za każdym razem wrzucić do UploadImage coś co implementuje interfejs z kontruktora, a nie zawsze jest taka potrzeba. Daj mi przypadek kiedy upload nie potrzebuje zapisać pliku, nie ma takiego. Cytat Klasa abstrakcyjna ma to do siebie, że oprócz metod abstrakcyjnych, które się w niej dodaje, nie daje możliwości stworzenia z niej bezpośrednio obiektu. Dopiero z klasy dziedziczącej po klasie abstrakcyjnej, można stworzyć obiekt. Dlatego właśnie klasy abstrakcyjne w moim rozwiązaniu nie posiadają konstruktorów, a gotowe metody, które funkcjonują dopiero po odpowiednim zdefiniowaniu konstruktorów klas dziedziczących. Więc nie chodzi o to: A kto mi zabroni zrobić konstruktor klasy abstrakcyjnej : http://ideone.com/VcUReV Cytat żeby dopisać słówko abstract, tylko, żeby nie można było stworzyć z niej obiektu, bo bez konstruktora jest bezużyteczna. Mam nadzieję, że wyjaśniłem. Wiem czemu to zastosowałeś, ale nie jest to dobre podejście. Każda klasa ma konstruktor nie ważne jakie słówko sobie przed nią postawisz. Bo jest coś takiego jak konstruktor domyślny, który nie musi być zdefiniowany jawnie i tu kłania się brak podstaw php (IMG:style_emoticons/default/wink.gif) Dlatego tez tworząc singleton musisz Cytat The constructor __construct() is declared as protected to prevent creating a new instance outside of the class via the new operator. Cytat Na koniec chcę dodać, że ten kod jest łatwiejszy do zrozumienia, ale trudniejszy do rozbudowy, dodasz parę rzeczy i zrobi się bagno, po za tym jeżeli przekazujesz pomiędzy dekoratorami plik bezpośrednio z requesta, to nie możesz zmienić mu nazwy, ani przeedytować go w żaden sposób, więc nadal jest to uproszczone rozwiązanie czysto teoretyczne. Poproszę choć jeden przykład, w którym miejscu (IMG:style_emoticons/default/smile.gif) daro0 zły przykład bo oba są poprawne, bo klasa abstrakcyjna daje nam tylko informacje o tym, że potomek potrzebuje jeszcze metody execute i ma to sens, bo unikniemy pomyłek, ale nie jest to wymagane, ale masz rację lepiej jak obiekt o to dba. Tylko, ze jak ktoś napisze to tak jak w przypadku b, to pamiętając o tym, ze ta klasa ma mieć te metodę tez zadziała, tylko poco ma to pamiętać. Cytat Zwykła klasa też nie musi mieć metod i co to też jest debilne? Nie, przykład wprost z jednego z moich projektów, nigdzie w definicji klasy nie masz powiedziane, ze ona ma mieć jakieś metody. Inaczej jest z klasa abstrakcyjna, która ma mieć co najmniej jedną metodę czysto wirtualna/abstrakcyjną.
Ten post edytował com 14.01.2017, 17:53:33 |
|
|
|
Post
#109
|
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%)
|
Cytat Daj mi przypadek kiedy upload nie potrzebuje zapisać pliku, nie ma takiego. Mówię o wrzucaniu do Upload obiektu klasy SessionStorage. Może nie być potrzeby zapisu do sesji i co wtedy? Po za tym metoda save() z Upload wygląda tak:
Co z resztą metod klasy SessionStorage? Cytat A kto mi zabroni zrobić konstruktor klasy abstrakcyjne Nikt, ale co to ma do rzeczy? Ty stwierdziłeś, że równie dobrze to mogła by być zwykła klasa, a nie mogła by być, bo była by bezużyteczna. Cytat Wiem czemu to zastosowałeś, ale nie jest to dobre podejście. Każda klasa ma konstruktor nie ważne jakie słówko sobie przed nią postawisz. Bo jest coś takiego jak konstruktor domyślny, który nie musi być zdefiniowany jawnie i tu kłania się brak podstaw php. Chyba dalej nie rozumiesz dlaczego użyłem klasy abstrakcyjnej, a nie zwykłej. Co z tego, że konstruktor jest domyślnie definiowany, skoro jest pusty? Zobacz sobie co dodaję w klasach dziedziczących po ClientMakerAbstract w folderze makerClients to może w końcu pojmiesz. Nie chce mi się marnować energii i nerwów na tą dyskusje już. Ten post edytował Omenomn 14.01.2017, 17:59:42 |
|
|
|
Post
#110
|
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%)
|
Cytat Mówię o wrzucaniu do Upload obiektu klasy SessionStorage. Może nie być potrzeby zapisu do sesji i co wtedy? No to do innego storage wtedy go zapiszesz, SessionStorage to tylko przykład. nigdzie nie powiedziałem ze wgl kiedykolwiek użyjesz go w tym miejscu. W Twoim systemie w miejsce SessionStorage wstawisz sobie FileStorage i wtedy zapiszesz te obrazki do pliku, a nie do sesji je wrzucisz. Cytat Co z resztą metod klasy SessionStorage? Ale co Cie one wgl interesują, są żebyś mógł wykonać dowolne operacje na tym obiekcie. A nie tylko to co akurat w tym miejscu potrzebujesz, w innym może się okazać, że potrzebujesz inne. Zajrzyj sobie do implementacji dowolnego obiektu typu Storage to będziesz wiedział czemu one tam są. Cytat Chyba dalej nie rozumiesz dlaczego użyłem klasy abstrakcyjnej, a nie zwykłej. Co z tego, że konstruktor jest domyślnie definiowany, skoro jest pusty? Zobacz sobie co dodaję w klasach dziedziczących po ClientMakerAbstract w folderze makerClients to może w końcu pojmiesz. Rozumiem, po to żeby w 8 miejscach mieć dostęp do tych samych metod i właściwości. Ale wystarczyło by ze byś miał w jednym a te klasę wstrzyknął jako zależność. Cytat Nikt, ale co to ma do rzeczy? Ty stwierdziłeś, że równie dobrze to mogła by być zwykła klasa, a nie mogła by być, bo była by bezużyteczna. Nie była by bo ona się u Ciebie nie zmienia, nawet jak tworzysz jej dziecko. Wiec równie dobrze mogła by istnieć bez niego i tez by to działało tak samo jak działa teraz. Cały twój kod w makerClients to kulawe Proxy, kolejny wzorzec który miał nim być ale nie jest bo nie wyszedł (IMG:style_emoticons/default/wink.gif) https://github.com/domnikl/DesignPatternsPH...tructural/Proxy Ten post edytował com 14.01.2017, 18:15:01 |
|
|
|
Post
#111
|
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%)
|
com, zastanów się człowieku co Ty w ogóle mówisz, bo tą Twoją przemądrzałą gadką o klasach abstrakcyjnych negujesz praktyki stosowane we frameworkach klasy Laravela.
Może napisz swój framework na wyższym poziomie niż Symfony i Laravel, a później neguj stosowane w nim praktyki. Klasa abstrakcyjna w Laravel odpowiedzialna za requesty:
Skoro takie kwestie negujesz, to jak mógłbym Cię słuchać w innych? |
|
|
|
Post
#112
|
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%)
|
A kto powiedział że Laravel jest dobrze napisany? Jak wygląda HTTP messaging definiują PSR-7 i draft PSR-17. I patrzysz chyba na jakiś stary kod bo obecnie class FormRequest extends Request implements ValidatesWhenResolved
|
|
|
|
Post
#113
|
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%)
|
Omenomn Coś długo trwało zanim coś wymyśliłeś, ale pierwsze pytanie skąd wgl ten kod masz, bo ja tam nigdzie w źródle laravel nie widzę takiej klasy. A poza tym coś Ty niby udowodnił nie pokazując kodu tej klasy abstrakcyjnej.
Cytat negujesz praktyki stosowane we frameworkach klasy Laravela Akurat Laravel to ma parę błędów w architekturze. Co sprawiło, że w Polsce bardziej ceni się Symfony. Na szczęście obecnie można już nie używać Fasad, i zastąpić Eloquent - Doctrine. Ten post edytował com 23.01.2017, 12:39:28 |
|
|
|
Post
#114
|
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 0 Dołączył: 4.02.2014 Ostrzeżenie: (20%)
|
Ta klasa abstrakcyjna nie ma kodu, jest pusta, co zaprzecza całej gadaninie coma i pythona na temat klas abstrakcyjnych.
Folder App\Http\Request\Request.php - Laravel 5.2. Napisz coś lepszego i wtedy się wymądrzaj, bo jak na razie wolę czerpać wzorce z Laravel niż słuchać przemądrzałego gościa, który jakby pewnie pokazał jakiś kod projektu, to by była taka sieka, że głowa boli. |
|
|
|
Post
#115
|
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%)
|
(IMG:http://x3.wykop.pl/cdn/c3201142/comment_uce5mt2Kik5EXF5ODi0IQUkerCwHZYF9.jpg)
Myślisz, że takie obrazki wzięły się znikąd? Ten post edytował kapslokk 24.01.2017, 08:41:54 |
|
|
|
Post
#116
|
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
Ta klasa abstrakcyjna nie ma kodu, jest pusta, co zaprzecza całej gadaninie coma i pythona na temat klas abstrakcyjnych. Po primo to nie "pythona". Szanujmy się. Po secundo to zacytuj mi moją wypowiedź w które powiedziałem że klasa abstrakcyjna nie może być pusta. |
|
|
|
Post
#117
|
|
|
Grupa: Zarejestrowani Postów: 160 Pomógł: 27 Dołączył: 22.09.2008 Skąd: Tarnów Ostrzeżenie: (0%)
|
@Omenomn
Uparty jesteś, niestety nie w tą stronę co trzeba. Jak za kilka lat przeczytasz swoje posty, to wstyd Ci się zrobi (IMG:style_emoticons/default/smile.gif) Wzorców projektowych nie powinieneś brać ani z Laravela, ani z Symfony. Wzorce projektowe po prostu są. Były przed Laravelem i przed Symfony. Ty po prostu zamykasz się co do jednego oczywistego i najwspanialszego frameworka. Laravel, mimo że zaczyna być frameworkiem od całego web, zaczynając od backendowego mvc po front, dalej jest tylko Laravelem. Za kilka lat może znudzić Cię webmasterka (bo na dłuższą metę jest nudna). Będziesz szukał pewnie programowania innych rzeczy. W czym Ci tu pomoże wzór Laravela? W niczym. Miałem kiedyś krótki epizod z chłopakiem, który znał odrobinę języków microsoftowych. Kodowaliśmy chwilę w php. Zrobił sporą sieczkę i tłumaczył jeszcze, że tak się robi, bo te języki które zna tak działały. Oczywiście, wymyślał coś na około mvc, byle by nie mvc. Projektu nie udało się postawić, bo chłopak nie umiał sobie poradzić ze swoim tworem w nowych warunkach (web). Może w chwili obecnej, kiedy pracujesz jako programista Laravel w firmie, jest Ci dobrze z tym co robisz i jak robisz. Życie i selekcja naturalna na pewno pokażą Ci, jak daleki jesteś od ideału developera. PS. Sam kiedyś byłem bojówkarzem. PHP był dla mnie najlepszym językiem, a Java i języki kompilowane to zło. Perspektywa czasu mi pokazuje, że po prostu głupi byłem (IMG:style_emoticons/default/smile.gif) . |
|
|
|
Post
#118
|
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%)
|
Omenomn sorry ale to Tobie się wydaje, że wiesz wszystko najlepiej. Ja tylko podałem Ci definicje klasy abstrakcyjnej, która znajdziesz wszędzie. Jakbyś pisał w językach typu c++ to byś wtedy ją zapewne dobrze znał. A co do kodu wspaniałego frameworka, spójrz na to co się z tą klasa która nie miała sensu dzisiaj stało. Dziś jej już nie ma. A do każdej klasy możną sobie dopisać abstract, ale to nie znaczy, że to czyni każdą klasę abstrakcyjną.
A jak się chwile zastanowić, to co ona niby dawała, no nic bo wystarczyło by rozszerzać FormRequest. Ale wierz sobie dalej, że Taylor Otwell, nie może się mylić, chociaż jak sobie poczytasz historie jego i Laravel, to jak już mówiłem są tam pewne błędy w architekturze i jedyne rozwiązanie to nie używać tego, czego przykładem może być chociażby Eloquent, który implementuje Active record, to też wzorzec, ale nie jest on dobrym pomysłem. Jednakże myślę, że już dalsza dyskusja nie ma sensu, bo stworzyłeś swój kod "doskonały" i próbujesz go obronić ja to rozumiem, jednakże jest on daleki od ideału i każdy Ci to powie, ja też wcale nie twierdze, ze moja implementacja to jedyna słuszna. Ten post edytował com 24.01.2017, 10:35:48 |
|
|
|
Post
#119
|
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 12 Dołączył: 17.09.2014 Skąd: Krasnystaw Ostrzeżenie: (0%)
|
Aż do takich wniosków typu czy tam są błędy to bym nie dochodził. AR czy tam Singleton są uważane co prawda za przestarzałe, jednak z AR prawdę mówiąc dość wygodnie się pracuje, zwłaszcza dzięki tym relacjom has many, has one, belongs to. Dodatkowo mogę sobie np. w prosty sposób np. zaimplementować filtry, czyli np. automatyczny hash hasła przy zapisie danych do modelu User, również walidacje danych. Jasne że się można przyczepić do niezgodności z SRP ale to już inna sprawa. Bo podejrzewam że gdybym się zastanawiał nad tym wszystkim, to projekt który mam skończyć w jakimś określonym terminie to bym skończył znacznie później, zaliczając przy tym sporą obsuwę.
Ale to jest pryszcz. Wystarczy sobie porównać L 4.2 vs. L.5.3 żeby dojść do tego jak duże są między nimi różnice i jakie to ma przełożenie na praktykę. I tylko jestem ciekaw jak będzie wyglądać v. 6.x Laravela, bo znowu mogą być takie zmiany, że już port nie będzie taki prosty choć na dzień dzisiejszy L 5.3 można uważać za OK. |
|
|
|
Post
#120
|
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%)
|
Zanim zaczniesz rzucać następnym razem nie słuszne oskarżenia to się zastanów:
Chciałeś kod "frameworka", samego kodu udostępnić nie mogę bo jest to zamknięte oprogramowanie, ale mogę dać światło na strukturę: (IMG:http://i68.tinypic.com/1414h0j.png) Użycie: (IMG:http://i68.tinypic.com/35217vm.png) Wcale nie potrzebuje Laravela czy Symfony, żeby pisać dobry czysty kod, który można wykorzystać w wielu projektach, a te frameworki wręcz w tym przeszkadzają, bo już z góry narzucają jedyną słuszną implementacje zgodną z ideą twórców. Framework taki jak Laravel czy Symfony też mam, ale nie mam takiego community jak one, wiec się nie rozwija, bo nie mam na to czasu. Powstał tylko dlatego, że te wielkie nie maja w pełni uporządkowanego api i pewien balast ciągną za sobą z wersji na wersję, dlatego, że nie mogą zrobić nagle bc breaka, co zdarza się jednak w Laravelu, za co jest krytykowany. Przykład ta klasa abstrakcyjna była do 5.2, dziś już nie ma. Dodatkowo powstał on z myślą o php 7, a w nowych projektach gdzie używam tego co jest powyżej target mam na 7.1, wiec wykorzystuje tam to co w nowej wersji najlepsze. Na chwile obecną te duże natomiast mogą tylko wspierać 7, ale nie używać, bo okres zakończenia rozwoju php 5 minął dopiero na początku tego roku, ale został przesunięty do wydania z przed pięciu dni. A wsparcie to jest problem, przykład doctrine/common: lib/Doctrine/Common/Persistence/ObjectRepository.php Jest to interfejs, który ma jedną z metod, o takiej definicji: Wszytko ładnie ale doctrine od ładnych paru wersji ma już implementacje taką: Niestety PhpStorm nie widzi tego, bo interfejs nie ma drugiego parametru i nie podpowie, a co więcej podkreśli jako błąd, choć kod będzie działać Jest to jednak nie do ruszenia, cytując: Cytat we have our hands tied on basically anything that involves changing interfaces daro0 Ja się zgadzam może i to się podobać, choć ja osobiście używałem w jednym projekcie i bardzo szybko uznałem, że nie jest to droga, która chce iść. Ale powiem Ci, że to co uważasz za zalety u konkurencji z data mapperem można zrobić w podobny sposób równie szybko. Ten post edytował com 24.01.2017, 17:44:19 |
|
|
|
![]() ![]() |
|
Aktualny czas: 8.01.2026 - 10:02 |