Symfony i Zend Framework – subiektywnie
Przed 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).









barat
3 lut, 2011
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)
sokzzuka
3 lut, 2011
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…
matipl
3 lut, 2011
@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.
barat
3 lut, 2011
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)
sokzzuka
3 lut, 2011
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/
Zyx
3 lut, 2011
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.
matipl
3 lut, 2011
@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…
webit
3 lut, 2011
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.
sokzzuka
3 lut, 2011
@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…
Darek
3 lut, 2011
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.
Zyx
3 lut, 2011
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.
snapshot
3 lut, 2011
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.
sokzzuka
3 lut, 2011
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).
barat
3 lut, 2011
Offtopic: W bajce było Żukosoczek
Damian Tylczyński
3 lut, 2011
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
singles
4 lut, 2011
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.
sokzzuka
4 lut, 2011
@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ł…
singles
4 lut, 2011
@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 :>
sokzzuka
4 lut, 2011
@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…
Kudlaty
4 lut, 2011
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
(w zasadzie to ściągaja z Django i RoR
Na razie muszę przyznać, że Django to na prawdę fajny fw. I dużo szybciej działa ten python od php
matipl
4 lut, 2011
@Kudlaty: bardzo się nie zgodzę. Aktualne ZF jest o niebo lepiej poukładane niż Symfony…
Jak tylko znajdę chwilę powrzucam jakieś przykłady.
singles
4 lut, 2011
@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ę.
sokzzuka
5 lut, 2011
Dla zainteresowanych – kilka słów o walidacji: http://blog.wsoczynski.pl/2011/02/05/o-walidacji-slow-kilka/
Tomasz Kowalczyk
5 lut, 2011
@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.
matipl
5 lut, 2011
@Tomasz: bardzo się mylisz… za Wikipedią:
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.
Tomasz Kowalczyk
5 lut, 2011
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ę.
Kudlaty
7 lut, 2011
@singles
(np bardzo dobre jest ZendLucene)
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
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
Z tego też względu poznaje pythona i Django co zaczyna mi się baaardzo podobać
ooczy
16 lut, 2011
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.
smentek
22 wrz, 2011
„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
…
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…
matipl
22 wrz, 2011
@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..
smentek
1 paź, 2011
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.