Temat: frameworki
Padają tu różne, dość abstrakcyjne argumenty na temat tego, czemu dany framework jest lepszy czy gorszy. Nie kwestionuję Waszych kryteriów oceniania.
Nie mniej, nalegam by oddzielić sam framework od "czegoś, co służy do wy-klikania aplikacji".
Argumenty typu obsługa jQuery, Prototype są nietrafione, ponieważ są to technologie do obsługi widoku i tak na prawdę najmniej wnoszą do core'a frameworki. Efekty graficzne, i niżej wymienioną obsługę "ajaxa" można dorzucić spokojnie przez biblioteki takie jak
behaviour. Rozwiązanie takie jest czyste (serwis działa bez JS) i przejrzyste, ponieważ kod PHP, HMTL i Java Script nie przelata się co drugi krok, żeby zrobić "efektowne" przeładowanie. Wcześniej ludzie uciekali od pomieszania PHP i HTML a teraz wracają to tak samo złej praktyki i w dodatku chwalą (Symfony, Cake PHP, CI).
Ajax - tutaj sprawa jest jasna - przecież to zwykłe wywołanie HTTP łączące się z Ajaxem, a totalną pomyłką jest dorzucanie oddzielnego wsparcia dla tego (vide ajax-actions w Symfony). Przecież różny jest tylko format odpowiedzi. Czy jeśli dorzucasz obsługę XML-RPC albo SOAP to tworzysz oddzielne akcje do tego? Absolutnie nie! Oczekujesz tych samych danych na wyjściu (nie ważne czy dostałeś je via POST/GET, czy w HTTP_RAW_POST_DATA), odpalasz tą samą logikę (akcje). Na końcu wypluwasz odpowiedzi, z tym, że w różnym formacie (widoki).
Tak są zorganizowane nowożytne frameworki dla Javy (min. Spring MVC).
Obsługa bazy danych. Frameworkowi nic do tego, jaką bazę danych i w jaki sposób ją obsługujesz. Rzeczy takie jak Active Record to ciekawy dodatek, który może przyśpieszyć pracę, oczywiście, ale powinna być możliwa praca bez niego. Szczytem porażki jest zamykanie się we frameworku na jedno i tylko jedno źródło danych i sposób dostępu do nich.
Ogólnie wg mnie kluczowym elementem każdego frameworka jest sposób obsługi żądań (request + front controler) oraz sposób uruchamiania akcji czy też powiązanie widoku z akcją. Oczywiście narzędzia typu scafolding są barzdzo przydatne, ale należy pamiętać, że prędzej czy później poza scafolding wyjść trzeba, i wtedy zwykle zaczynają się problemy, nie wspominając już o problemach z wydajnością (Active Record czy też Propel generujący dziesiątki zapytań).
Osobiście, moje preferencje najbliższe są
Agavi. Oprócz ciekawych rozwiązań (walidacja formularzy, form population filter, caching filter) jest zastosowany wcześniej opisany sposób na obsługę widoków, elastyczny sposób obsługi widoków (w połączeniu z template layerami - wcześniej dekoratorami, slotami) pisanie jest bardzo fajne.
Po godzinach pracuję nad integracją PHPIDE z Agavi oraz dorzuceniu paru ficzerów wspomagających pracę, a po godzinach powoli zaczynam tworzyć generatory, które mogłyby przyśpieszyć pracę z użyciem w/w frameworka.
Jeśli idzie o szybkie tworzenie aplikacji to mogę polecić Symfony, sprawdzony flow (wycięty z Mojavi) oraz podrasowany Propel (wersjonowanie, internacjonalizacja) a przede wszystkim wspaniała dokumentacja sprawia, że da się w ciągu tygodnia zrobić to, co wcześniej robiło się przez trzy.
Btw. Zapraszam na
mojego bloga, gdzie jest troszkę o Agavi i innych frameworkach. :)
Zachęcam też do przeczytania
bardzo luźnych dywagacji na temat frameworków.