Mateusz matipl Kamiński: o programowaniu (m.in. PHP), Apple (iPhone, iPad), usługach Google i finansach

Symfony i Zend Framework – subiektywnie

Zend FrameworkPrzed majem 2010 roku w świecie PHP poruszałem się głównie z pomocą Zend Frameworka. Kilka lat wcześniej był to autorski framework (netEngine) oraz firmowe frameworki. Z perspektywy czasu uważam, że złe było rozwijanie własnych narzędzi, zamiast pomóc społeczności. Taki zbiorowy projekt jest świetny:

  • bardzo szybko rozwijany
  • zawsze znajdziesz osobę, która zna framework (a Twój lub firmowy?)
  • spora baza tutoriali w Sieci
  • popularny = groźny (wykryta dziura w Australii może spowodować ciężki tydzień w Twojej firmie)

Od maja pracuję głównie z wykorzystaniem Symfony (1.4). Z mojego punktu widzenia przedstawia on odmienne podejście do sprawy. W Symfony da się sporo rzeczy ustawić z góry, dobry cmd line, a mnóstwo mamy out of box. Ale rozwijanie Symfony o własne dodatki czy helpery nie jest przyjemnością. Symfony odbieram jak takiego WordPressa – sprawdza się, ale jego kod pozostawia wiele do życzenia (przeplatanie języka proceduralnego z obiektowym).

Najgorszy minus Symfony 1.4 ? Mimo, że jest długo na rynku i jest najnowszą stabilną wersją Sieć prawie o nim milczy poza oficjalną dokumentacją. Jeśli przyjdzie zmierzyć się Tobie z nietrywalnym problemem lepiej od razu przejrzeć kod źródłowy frameworka niż szukać w Google.

Od grudnia znów pracuję z Zend Framework, przy okazji projektu bilancio. Wrażenia ogólne – bosko, w końcu czuję się jak w domu. Mam tyle obiektów ile dusza zapragnie. A Google bardzo jest pomocne. Najgorszy był początek przy powrocie z Symfony.

Nadal nie widzę dobrze opisanego application.ini w Sieci, a można obecnie przez niego pozbyć się nadpisywania większości zasobów (ach czasy ZF < 1.0). Dodatkowo wydaje mi się, że formularze w Symfony „szybciej mi szły”. Chociaż irytujące jest, że w większości wypadków wypluwał inputy, zamiast pełnego tagu form (łatwiej obudować w ZF jak się potrafi). No i te magiczne url_for() w Symfony (w zależności od parametru wywołuje rózne inne funkcje).

Po pierwszym tygodniu pracy z Zend Framework nie chcę się z nim znów rozstawać, Symfony to naprawdę nieprzyjemne środowisko. A przy okazji projektów ZF może w końcu zacznę dzielić się jakimiś drobnostkami z Wami. Zobaczymy czy czas pozwoli (jak widać po blogu tutejszym ostatnio mi go brak).

PS: Przed wczoraj został opublikowany Zend Framework w wersji 1.11.3 (30 załatanych dziur).

Podobne wpisy:

CZYTAJ PRZEZ RSS

  • Tu masz frameworki pod względem wydajności – fajny raport:
    http://www.slideshare.net/pmjones88/framework-and-application-benchmarking

    Sam osobiście pracuję z Kohana (wcześniej 2.3, teraz 3.x)

  • Nie miałem styczności z Symfony, natomiast Zend-a używam już od dłuższego czasu i stwierdzam, że jest trochę „przekomplikowany” pod względem architektury. Natomiast sam kod jest w wielu miejscach obrzydliwie napisany…

  • @sokzzuka: architektura ZF daje po prostu spektrum możliwości, w końcu na początku był to taki ezComponents.
    Obrzydliwie? Możliwe, że da się ładniej…ale nie znam pięknego i dobrego frameworka.

  • Każdy FW ma coś, do czego można się przyczepić ;)
    Z Zend jest ten „problem”, że bardziej jest to zbiór klas (IMO), a nie framework.
    Z Kohana 3.0.x da się zrobić coś takiego:
    http://www.beyondcoding.com/2009/10/29/using-zend-framework-1-8-with-kohana/

    I już mam Kohanę z możliwością korzystania z klas Zend’a, aczkolwiek na razie korzystałem tylko z Soap+Auto_Discover (łatwe tworzenie serwera+wsdl na bazie modelu z komentarzami)

  • To nie jest kwestia tego, że musi być taka architektura, żeby ZF miał te wszystkie możliwości, które ma. Można to dużo prościej zrealizować po prostu. Wg mnie, np. cała warstwa kontrolerowa aplikacji to jedno wielkie nieporozumienie. Jest do tego stopnia zamotana, że ciężko jest w niektórych przypadkach przewidzieć flow aplikacji, patrząc w sam kod Routera, FrontControllera i Dispatchera. Na szczęście główny architekt ZF – Matthew Weier O’Phiney poszedł po rozum do głowy, polecam przeczytać http://weierophinney.net/matthew/archives/250-Simple-Interfaces-and-Micro-MVCs.html . Sam też zacząłem coś eksperymentować przy okazji opisywania chain of responsibilty -> http://blog.wsoczynski.pl/2010/08/29/wzorce-projektowe-lancuch-odpowiedzialnosci-chain-of-responsibility/

  • Spektrum często kompletnie niepotrzebnych możliwości. Korzystałem z ZF-a dość długo; na początku przeszkadzały mi braki w funkcjonalności, które trzeba było samodzielnie łatać, by cokolwiek napisać, natomiast później to, co wymyślili, by je załatać. Ile się nakląłem przy próbie dodania własnych, modułowych zasobów do Zend_Application, to nie zliczę, a ichniejszego autoloadera to nawet nie tykam. Najgorsze jest to, że oni najpierw sami sobie komplikują życie, wprowadzając jakieś kretyńskie założenia z kosmosu, by później mieć co korygować, zamiast wprowadzić logiczną, łatwą do przetwarzania konwencję.

    O Symfony 1.x też nie mam zbyt dobrego zdania, ale dwójka wygląda już o wiele lepiej i w chwili obecnej muszę stwierdzić, że wysuwa się przed ZF-a, jeśli chodzi o jakość kodu.

  • @barat: właśnie dzięki komponentowej budowie to możesz ;) To mnie w Symfony denerwuje, że nie da się w oderwaniu np. od form skorzystać z jakiś tam klas…

    @sokzzuka: jasne, że klasy momentami są przerośnięte bo np. ktoś chciał zrobić coś super uniwersalnego.
    Poczekajmy na S2 i ZF2…

  • Ja ostatnio z kolei dzialam z CodeIgniter’em (z przymusu). I powiem ze do malych rzeczy jest lepszy (niestety) od ZF, bo duzo szybciej mozna pewne rzeczy zrealizowac. Do duzych projektow wg nadal nie ma nic lepszego niz ZF.

  • @matipl – super uniwersalność właśnie wymaga jak najwięcej prostoty i o tym właśnie chyba zapomnieli kontrybutorzy ZF. Co więcej, niektórzy piszą kod, jakby pisali w Javie a nie w PHP…

  • Od ponad roku pracuje z Zend framework, wczesniej z symfony ver. 1.0 – 1.4. W zendzie jest dużo funkcjonalnosci, ktorej nie znajdziesz w symfony i na odwrot. To są rózne frameworki, poprostu można używać w projektach symfony zenda jak i w zendzie symfony.

    Co do porównania symfony do wordpresa „Symfony odbieram jak takiego WordPressa – sprawdza się, ale jego kod pozostawia wiele do życzenia (przeplatanie języka proceduralnego z obiektowym)” – to nie zgadzam sie z tym.

    Pozdr.

  • Muszę zgodzić się z sokzzuką – kobylasty interfejs nie jest gwarancją uniwersalności czy elastyczności. Często jest dokładnie na odwrót, bo autorzy trochę za bardzo się zapędzili w próbach ułatwiania życia.

  • Ja osobiście czekam na wersję ZF 2.0. Mam nadzieję, że wszelkie problemy, które zostały wspomniane (i sam je dostrzegam) zostaną naprawione.

  • Zyx, litości nie odmieniaj mnie tak ;) -> http://pl.wikipedia.org/wiki/Sok_z_%C5%BBuka (sok z żuka jest w rodzaju męskim)

    Btw. klasycznym przykładem przeładowanych interfejsów w ZF jest nadużywanie getterów i setterów. Po prostu 90% kodu klasy to zazwyczaj są tego typu metody, co kompletnie psuje enkapsulację. Drugim syndromem są wszechobecne Singletony oraz SingletonSingletonów -> Zend_Registry. Nie mówiąc już o metodach, które niejawnie operują na innych obiektach i powodują lawinę efektów ubocznych (magiczny FrontController).

  • Offtopic: W bajce było Żukosoczek ;)

  • W symfony miałem jednak wrażenie, że wszystko jest logicznie poukładane i nie łatane po macoszemu. Zend Framework to burdel na kółkach, używałem od wersji < 1.0 i widziałem jak ten potwór, przez następne 2 lata mojego użytkowania, był klejony na ślinę z zestawu klas w kompleksowego frameworka. Miało być pięknie, uniwersalnie, bez zbędnych zależności wewnątrz biblioteki, a jaki jest koń, każdy widzi :)

  • Myślę, że w przypadku obu wymienionych frameworków, których wersje 2.0 zobaczymy niebawem (aczkolwiek, w przypadku ZF to „niebawem” chyba będzie dłuższe) twórcy wyciągnęli wnioski z błędów popełnionych wcześniej.
    Sam Matthew Weier O’Phinney przyznaje, że w ZF jest na obecną chwilę za dużo magii (polecam prezentację: http://www.slideshare.net/weierophinney/introducing-zend-framework-20), a na swoim blogu rozwodził się także na koncepcjami autoloadera do nowego ZF.

    Czy ZF jest przekombinowany? Miejscami tak, natomiast ma kilka komponentów których używa się naprawdę wygodnie (formularze!).

    Obie wersje 2.x tych frameworków zapowiadają się ciekawie,

    Swoją drogą – bardzo podoba mi się koncepcja Symfony Components.

  • @singles formularze mają swoje zady i walety. Dopóki trzeba zrobić prosty formularz to jest ok, natomiast bardziej skomplikowane, często opłaca się zakodować (przynajmniej od strony widoku) ręcznie niż masakrować się dekoratorami. Poza tym mam trochę zastrzeżeń co do koncepcji walidacji ale to jest temat na osobny artykuł…

  • @sokzzuka prawdą jest, że dekoratory w Zendzie potrafią skomplikować sprawę i to mocno, natomiast plusem jest to, że możesz jako dekorator dać zawsze viewScript (co nie jest niestety jakoś super wydajne), napisać własny helper widoku albo jeszcze inna opcja.

    A w skrócie – jakie to zastrzeżenia odnośnie walidacji? No chyba że arta planujesz u siebie :>

  • @singles: napisze coś u siebie, bo to raczej będzie dłuższy wywód. Co do ręcznego kodowania, miałem właśnie na myśli głównie viewScript…

  • według mnie ZF to zlepek śmieci, a przy SF wydawało mi się że w końcu wszystko jest poukładane, jak na frameworka przystało :)

    A obecnie siedzę nad rozpracowaniem Django :)
    Trzeba w końcu poznać framework od którego ściągają php’cowe frameworki :P
    (w zasadzie to ściągaja z Django i RoR :P )
    Na razie muszę przyznać, że Django to na prawdę fajny fw. I dużo szybciej działa ten python od php :)

  • @Kudlaty: bardzo się nie zgodzę. Aktualne ZF jest o niebo lepiej poukładane niż Symfony…
    Jak tylko znajdę chwilę powrzucam jakieś przykłady.

  • @Kudlaty – ZF zlepkiem śmieci? Mógłbyś wyjaśnić?:)

    A Django/RoR kusi kusi, aczkolwiek obawiam się, ze jakby przyszło to zaprogramowania mniej standardowych rzeczy, to też potrafiłoby pokazać ciemną stronę.

  • Dla zainteresowanych – kilka słów o walidacji: http://blog.wsoczynski.pl/2011/02/05/o-walidacji-slow-kilka/

  • @matipl: Po prostu symfony jest już „ułożone” (można jedynie dyskutować, czy dobrze, czy źle), a ZF to tylko zbiór narzędzi, które musisz sobie sam poukładać według własnego widzimisię. Jak sobie źle ułożysz, to narzekasz, a jak Ci pasuje, to się cieszysz.

  • @Tomasz: bardzo się mylisz… za Wikipedią:

    W programowaniu komputerowym framework jest szkieletem do budowy aplikacji. Definiuje on strukturę aplikacji oraz ogólny mechanizm jej działania, a także dostarcza zestaw komponentów i bibliotek ogólnego przeznaczenia do wykonywania określonych zadań. Programista tworzy aplikację, rozbudowując i dostosowując poszczególne komponenty do wymagań realizowanego projektu, tworząc w ten sposób gotową aplikację.

    Jak wcześniej z przedmówcami mówiliśmy, ZF i Symfony różnią się podejściem, ale oby dwie spełniają tą definicję.
    Tyle co kod Symfony 1.4 pozostawia wiele do życzenia IMHO.

  • Nie cytuj mi Wikipedii, bo definicję frameworka dobrze znam – w końcu niedługo będę bronił pracy inżynierskiej na ten temat (przy okazji – wymieniłem tam ZF, jako jeden z przykładów). Nie powiedziałem przecież, że ZF nie jest frameworkiem, stwierdziłem jedynie, że w ZF wszystkie elementy są na tyle luźno połączone, że możesz sobie dostosować strukturę projektu do własnych wymagań, a w symfony masz już dokładnie wskazane miejsca i strukturę, jaka jest wymagana do działania. W każdym razie w symfony masz mniej miejsc, w których możesz pozwolić sobie na „samowolę”.

    I Ty znowu z tym „myleniem”, „kłamaniem”, „oszukiwaniem” – weź sobie kup jakiś słownik synonimów, co? Masz tak ostry język, że tylko odrzucasz, zamiast przekonywać. „(Uważam, że) nie masz racji, bo…” niesie podobny przekaz, jak zwrot „mylisz się”, a jest o wiele lepiej przyswajany przez potencjalnego rozmówcę.

  • @singles
    Nie mówię tutaj, że ZF to rzeczywisty „zlepek śmieci” bo w zasadzie ma dużo bardzo dobrych bibliotek które wykorzystuje się w innych frameworkach :P (np bardzo dobre jest ZendLucene)
    Ale tak to nazwałem ze względu na budowę tego frameworka, którego i tak nazywam zbiorem bibliotek :)

    Jest też jedna ważna rzecz… Nie powinniśmy się kłócić o to kto jakiego frameworka woli, i który jest lepszy.
    Dla każdego z nas może być co innego lepsze, jedynie testy wydajnościowe mogą się różnić. Bo w końcu i tak największym problemem frameworków php jest sam php :P
    Z tego też względu poznaje pythona i Django co zaczyna mi się baaardzo podobać :)

  • popieram… SF jest taka zabawka jak wordpress…
    zrobienie wlasnego plugina koszmar, praca z niektorymi pluginami gotowymi – koszmar.
    wlaciwie wszystko tam jest ale nic konkretnego
    popieram pelna piersia stwierdzenie co do kodu w symfony – to wybuchowa mieszanka kodu proceduralnego i obiektowki.
    W ZF jak dla kogos kto programuje OOP strict wszystko jest naturalne, zrozumiale, proste.
    W symfony musi byc wszystko przekombinowane. Niby idea frameworka calkiem niezla ale w rzeczywistych zastosowaniach klapa.

  • „Symfony odbieram jak takiego WordPressa – sprawdza się, ale jego kod pozostawia wiele do życzenia (przeplatanie języka proceduralnego z obiektowym).”

    Całkowicie nie trafiona opinia! :) Nie zamierzam namawiać nikogo do symfony, programujcie sobie w czym chcecie. Ale zlitujcie się. Więcej pokory i mniej bajkopisarstwa!

    Pod względem architektury wewnętrznej i jakości kodu symfony framework 1.4 bije na głowę zend framework 1.11. Jeżeli Zend 1.11 jest Fordem Fiesta, to symfony 1.4 jest dobrym audi A4. O Symfony2 nawet nie wspominam, to już musiał by być samolot :P

    Co do jakości kodu w rozumieniu dobrego jego przetestowania i stabilności – to samo. Przytaczany moduł zenda do obsługi formularzy aż roi się od błędów. Błędów, których nikt nie naprawia od lat! Także nawet jeżeli brak komuś wiedzy i umiejętności prawidłowej oceny systemu pod względem jego architektury liczne błędy powinny dać do myślenia…

    Architektonicznie zend jest słabym systemem, (silny jest jedynie przy porównaniu do frameworków wewnętrznych małych firm) roi się w nim od singletonów i dziwacznych rozwiązań w stylu przekazywania tablic czy obiektów opcji do konstruktora. Czytelność kodu co najwyżej dostateczna! Nadużywanie metod magnicznych, Jak na system pomyślany jako luźna biblioteka z której można wybierać zend ma też w kodzie całą masę sprzężeń. itd. itp.

    Symfony 1.4 mógł być z powodzeniem rozwijany dalej podczas gdy zend 1.11 jeżeli chodzi o rozwój doszedł już dawno do ściany…

  • @smentek: obiektywizm pełną parą. Spójrz na helpery do tworzenia url-i w Symfony, a później wróć.
    Przeszkadzają Ci błędy? Co miesiąc w ZF jest orgniazowane łatanie błędów przez chętnych..

  • Obiektywizm, subiektywizm.. Fakty! Zend jest systemem slabiej napisanym i cokolwiek leciwym.

    „Przeszkadzają Ci błędy? Co miesiąc w ZF jest orgniazowane łatanie błędów przez chętnych..”

    Kiedy wyszedł Zend Framework w stabilnej wersji 1.0? 2007 rok? ile to daje „łatania błędów”? 2007, 2008, 2009, 2010, 2011. 60 miesięcy? Może tych chętnych nie ma bo kod naszpikowany magią jest tak nieczytelny jak cholera, ze nikt nie ma ochoty się w tym babrać? Moze O’Phinney jest jak ten cygan co zamiast myć swoje brudne dzieci woli robic nowe (zf2)? A fanów swojego dziela olewa?

    „obiektywizm pełną parą. Spójrz na helpery do tworzenia url-i w Symfony, a później wróć.”

    To jest argument jak z poprzedniej epoki. „Co by złego o ZSSR nie mówić to w Ameryce biją murzynów!”. Czy helpery symfony mają udowodnić ze Zend jest lepszym systemem od symfony? Po co to udowadniać?

    Trzeba łapać to co jest najlepsze, a nie tracić czas na „obronę” wczorajszych systemów. Napisz lepiej post o dependency injectioni napisz dlaczego ZF bedzie mial IoC container. Taki mechanizm ma też S2 http://components.symfony-project.org/dependency-injection/documentation.

Możesz śledzić odpowiedzi za pomocą kanału RSS 2.0

Trackbacks / Pingbacks