tuner
22.06.2007, 19:57:22
Pracuję nad obszernym projektem, u którego podstaw został wybrany Zend Framework.
Na początku wielka niespodzianka. Ogromna skalowalność, wszechobecne podmienialne adaptery, interfejsy do implementacji własnych rozwiązań, marzenie każdego programisty. Jednak potem nie było już tak różowo.
Przykład? Widok. Topornie prosty, choć rozszerzalny za pomocą helperów nie ma żadnej wbudowanej możliwości "zaprzyjaźnienia się" z modelem. Brak koncepcji layoutów, które były mi tak przydatne w CakePHP oraz moim własnym rozwiązaniu (nie zapominając oczywiście o Symfony).
Zabieram się więc do dodawania nowych featureów. Na pierwszy ogień poszła konfiguracja dla każdego kontrolera indywidualna, dziedziczona po głównym, zapisana w YAMLu. To było proste. Zabawa zaczęła się dopiero po zagłębieniu się w problem modelu. Ciągłe zadawanie sobie pytań: "czy ta implementacja jest dobra?", "czy jest zgodna z filozofią projektowania w ZF?". Wpisałem w obiekty tabel automatyczne łączenie się z bazą. Zabrałem się za automat walidujący zmienne wejściowe z konfiguracją na plikach. Jako, że serwis ma być oparty o mechanizmy internacjonalizacji postanowiłem połączyć komponenty Zend_Translate i Zend_Validate. Katorga. Nikt nie pomyślał o możliwości dołączenia obiektu Zend_Translate do obiektów walidatorów. Nie chciałem mieszać w strukturze ZF, zrobiłem więc to "na około". Przyszedł czas na widok. Koszmar.
Praca z tym frameworkiem było dla mnie ciągłym badaniem struktur klas i interfejsów, próbami połączenia ich w jakąś nadającą się do wygodnej pracy całość. Na początku może i było to ekscytujące. Stało się jednak ciągłym planowaniem i rozmyślaniem. Obudziłem się tydzień temu z przeświadczeniem, że ten framework nie pomaga mi w pracy. Że ja wogóle na nim nie pracuję, że on nie przyśpiesza mojego procesu developerskiego. Czułem się jakbym przez te 2-3 tygodnie non-stop pisał do niego hacki, szukał kruczków, miejsc w których mógłbym ze spokojem zaimplementować własne pomysły by jego twórcy "nie obrazili się na mnie".
Czy na tym miała polegać praca na ZF? Może jestem zbyt wymagający, czekam na rozwiązanie podane na talerzu? Czy to jest ta wspaniała modularność, która miała przyśpieszać proces tworzenia aplikacji w PHP?
Więc zacząłem pisał "z palca" wszystko co mi było potrzebne. Nie przejmując się istniejącymi rozwiązaniami zaprogramowałem dla siebie komponenty i połączyłem je w całość tak jak chciałem, choć nie tak jak marzyłem. Przestałem się przejmować konwencjami Zenda, głowieniem się nad ideą napisania czegoś, tak, a nie inaczej. Ale czy na tym ma polegać praca na frameworkach?
mike
22.06.2007, 20:06:26
Bo widzisz padłeś ofiara oszustwa :-)
Oszustwa jakie zgotował Zend wszystkim nazywając swój produkt frameworkiem.
A to gówno nie framework. Owszem, nie przeczę że jest to kawał dobrej roboty i mnóstwo doskonałego kodu. Ale jest to pójście tylko o niewielki kroczek dalej niż poszło eZ pisząc eZ Components.
To wszystko to zbiór klas, moim zdaniem zbyt luźno powiązanych ze sobą i będących zbyt daleko od siebie by nazwać frameworkiwm.
ZF to twór dzięki, któremu framweork, który to ma Ci pomóc w pracy możesz dopiero sobie zbudować, a nie framework, który dostajesz. To czy zbudujesz dobre narzędzie, czy nie, zależy od Ciebie.
Ja osobiście polecam Symfony, ponieważ jako jeden z niewielu frameworków daje Ci gigantyczna elastyczność przy idealnej budowie i zachowaniu filozofii MVC. Symfony posiada doskonały kod i ogromne możliwości.
Rzuć w cholerę ZF.
tuner
22.06.2007, 20:17:36
Wyboru dokonał menadżer projektu (z moimi porównaniami istniejących na rynku frameworków; ja też nie jestem bez winy). Symfony zostało odrzucone ze względu na niską wydajność.
Nie przeczę, że zabawa z Zendem w budowaniu frameworka jest dość przednia. Jest miło, ale tylko i wyłącznie gdy ma się dużo czasu, gdy możesz sobie kupić piwko lub zaparzyć kawę i poskakać po kodzie źródłowym każdego z setek plików w /library. Ale, gdzie tu czas na takie babranie się w napiętym komercyjnym projekcie?! Szkoda gadać. To już szybciej napisałbym od zera własne rozwiązanie, a komponenty dopisywał na poczekaniu, wymyślając założenia w przerwie na kibelek.
Moim zdaniem przeznaczeniem Zend Frameworka jest pokazywanie go na pokazach/wykładach p.t. "Przejrzysty, porządny kod OO - jak pisać". Będzie pokazówką Zenda, która będzie miała bardzo mało wspólnego z praktycznym zastosowaniem jako typowy framework.
Marzy mi się bojkot, lub jakaś kampania społeczna, która uświadomi biednym osobnikom przez swoimi IDE, że wchodzenie w ZF to błąd, którego bierzesz żałował ty i twój pracodawca.
mike
22.06.2007, 20:37:51
Cytat(tuner @ 22.06.2007, 21:17:36 )

Symfony zostało odrzucone ze względu na niską wydajność.
Is symfony too slow for real-world usage?Symfony nie jest najszybsze. Nie ma co tego ukrywać.
Nie mniej jednak każdy zapomina, że kupno jednego procka na serwer i dodatkowej kości RAMu to koszta dużo mniejsze niż opłacenie zespołu programistów, dbających o optymalizację.
Trzeba sobie uświadomić, że frameworki są do tego by pomagać w pacy i koszta szybkości należy im wybaczyć.
Identycznie jest z OOP, które przecież jest wolniejsze od programowania proceduralnego. A przecież każdy zna jego zalety.
Zresztą. Właśnie tracisz czas, który zaoszczędziliście na szybkości ZF
seaquest
22.06.2007, 21:58:28
Przepraszam bardzo, ale co ma wspólnego model z widokiem? Bo moim zdaniem niewiele.
A co ma wspólnego Translacja z Walidacją? Podobnież. Więc zastanów się, czy to Twój tok myślenia jest na pewno prawidłowy.
Owszem zgadzam się mike, że ZF to nie framework, tylko podstawa do jego budowy. Na prawdę świetna podstawa.
Podobnie też zgadzam się jeżeli chodzi o kwestie serwery-programiści, dlatego coraz częściej wybieram Rails do swojej pracy.
tuner
22.06.2007, 22:21:49
Jednak komponent każdy pojedynczy walidator domyślnie zwraca komunikaty błędów. Jak już tak bardzo szli w separację komponentów, tak strasznie stricte podeszli do struktury MVC czemu kradną mi moc obliczeniową podczas korzystania z walidacji, kiedy nawet nie mogę w prosty, zautomatyzowany sposów internacjonalizować aplikacji?
Zastanawia mnie fakt, czemu nikt jeszcze nie zaczął integrować wszystkich komponentów w jedną frameworkową całość. Oczywiście mówię tu ogólnodostępnej dystrybucji. Czy jest to w roadmapie ZFa?
Irytuje mnie w ZF, że ta ogromna chęć modularności i separacji wszystkiego co tylko możliwe paradoksalnie bardzo utrudnia stworzenie czegokolwiek sensownego. Bo chcąc skonstruować z tego przyjazny framework musimy często łamać zasady narzuconej struktury. Chciałbym żeby napisana przeze mnie integracja była równie skalowalna jak sam surowy framework, ale bardzo się na tym przejechałem. Napisanie porządnej integracji ZF w coś user-friendly to albo rezygnowanie z modularności, niezależności wszystkiego, albo praca dniami i nocami, i kontynuowanie filozofii frameworka zaprzepaszczając cenny czas.
Temat ten był wynikiem irytacji wywołanej zbyt małą orientacją w czasie jaki potrzebny jest przy wdrożeniu ZF w dużym projekcie. I nie ukrywam, że dzieło Zenda jest fascynujące pod względem budowy, ale z mojego punktu widzenia totalnie niepraktyczne.
seaquest
23.06.2007, 11:23:53
@tuner: powiedz mi co ma wspólnego walidacja danych z internacjonalizacją? Bo ja tego nie widzę i nie rozumiem szczerze mówiąc. Przecież walidujesz dane w ten sam sposób, nieważne czy ktoś wpisze Hello world! czy Witaj świecie!
Podejrzewam, że to Ty masz nieodpowiedni tok myślenia w tym wypadku i programiści Zenda wiedzieli co piszą.
mike
23.06.2007, 11:33:51
Cytat(seaquest @ 23.06.2007, 12:23:53 )

@tuner: powiedz mi co ma wspólnego walidacja danych z internacjonalizacją? Bo ja tego nie widzę i nie rozumiem szczerze mówiąc. Przecież walidujesz dane w ten sam sposób, nieważne czy ktoś wpisze Hello world! czy Witaj świecie!
Ale komunikat o błędzie wyświetlasz inny.
Tak tylko zwracam uwagę na fakt, że sprawdzanie poprawności danych istotnie może być związany a interpersonalizacją.
phpion
23.06.2007, 11:41:25
Cytat(seaquest @ 23.06.2007, 12:23:53 )

@tuner: powiedz mi co ma wspólnego walidacja danych z internacjonalizacją?
może mieć coś wspólnego, np. walidacja kodów pocztowych, numerów telefonów itd.
seaquest
23.06.2007, 11:44:27
@mike, ale komunikat nie ma nic wspólnego z walidatorem.
Walidator sprawdza dane i zwraca true/false.
Poprawna komunikacja w ZF między tymi dwoma elementami powinna wyglądać mniej więcej w ten sposób:
l18n <-> widok <-> kontroler <-> walidator
Więc nie ma bezpośredniego związku walidatora z l18n.
tuner
23.06.2007, 12:37:14
Cytat(seaquest @ 23.06.2007, 10:44:27 )

@mike, ale komunikat nie ma nic wspólnego z walidatorem.
No właśnie, bo co ma walidator do komunikatów? W framie Zenda ma I TO DUŻO wspólnego. Mówię tu właśnie o małym przykładzie paradoksu architektury ZFa. Ten komponent projektu jest IMO do przeprojektowania, bo w tym wypadku programiści nie przemyśleli co piszą.
seaquest
23.06.2007, 14:21:08
@tuner a kto powiedział, że nie możesz zrobić tego tak jak mówię?
Fakt, że może wyjście, które proponuje Zend nie jest najbardziej komfortowe (choć da się to zrobić także w inny sposóB), ale zawsze możesz to zrobić lepiej i moim zdaniem łatwiej.
tuner
23.06.2007, 15:05:42
Prawda

Tylko, że walidator pluje komunikatami z zaszytymi szczegółami walidacji (typu: maksymalnie 3 znaki). A internacjonalizacja w takim wypadku nie jest przyjemna.

ZF fajny jest, ale potrzebuje jakiegoś wydania box na wzór, dla przykładu, przedstawionego wcześniej Symfony.
No to wracam bawić się ZFem

I takiego jedno spostrzeżenie. IMO ZF nie jest dla osób zaczynających zabawę z frameworkami, a wymagających dużych ich możliwości.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.