Dla Javy napisano już setki, jeśli nie tysiące szkieletów
do pisania aplikacji webowych. Jeśli ktoś wnikliwie czyta
newsy na theserverside to wie, że nowe frameworki
powstają jak grzyby po deszczu.
Pytanie jednak brzmi... skoro każdy szkielet jest taki
dobry, to czemu powstają nowe? Odpowiedź jest jedna - nie
da się napisac szkieletu dla każdego. Ponadto wiele nowych
frameworków bardziej utrudnia niż ułatwia życie
programistów, starając się rozwiązać każdy problem.
Świadczy może o tym na przykład fakt, iż wciąż najczęsciej
używany jest Struts, pomimo swego sędziwego wieku.
Jakie więc powinny być cechy idealnego frameworka? W mojej
opinii szkielet to narzędzie, które pozwoli programiście
przede wszystkich na łatwiejsze i szybsze pisanie
aplikacji. Dlatego też szkielet powinien być jak
najprostszy, mieć przejrzyste API, zadbany i przemyślany
kod źródłowy, aby programista mógł bez problemu go
zrozumieć (często lepiej jest po prostu zobaczyć jako kod
działa, aniżeli czytać często niekompletną dokumentację).
Jeśli zaś mówimy o szybkości pisania aplikacji to developer
powinien implementować ją w sposób niezwykle zwinny (ang.
agile). Chodzi o to, żeby programista (na przykład na
życzenie klienta) mógł bardzo szybko nanieść poprawki bez
konieczności wprowadzania zmian w kilku miejscach, długim
testowaniu aplikacji od strony GUI (na przykład w przypadku
brak możliwości pisania testów jednostkowych dla
komponentów GUI) czy wreszcie ciągłych restartów serwera.
Jeszcze jedna kwestia - szkielet nie powinien w żaden
sposób ograniczać programisty! Jeśli coś można w prosty
sposób zrobić w HTMLu i JavaScriptcie, to i w tym
szkielecie musi to być czynność prosta i przede wszystkim
możliwa(!).
Oburzony brakiem "idealnego" frameworka, stworzyłem własny
prototyp takiego szkieletu - zaprojektowany tak, aby
mógłbyć podstawą większości aplikacji tworzonych w
standardowym modelu klient-serwer (bez udziwnień AJAXowych,
z wiszącymi połączeniami włącznie). Szkielet ten zawiera
jedynie podstawową funkcjonalność (brakuje w nim chociażby
walidatorów), jednak w mojej opinii jest ona w zupełności
wystarczająca. Uznaję zasadę, że programista musi znać
szkielet, którego używa w 100 procentach. Jeśli
udostępniłbym programiście zaawansowane komponenty, to
mógłby on w ogóle nie rozumieć zasady ich działania (co w
końcu doprowadziłoby do poważnych przestojów w projekcie,
związanyc z poprawianiem uprzednio napisanego kodu).
Ów prototyp okazał się na tyle ciekawy, że postanowiłem
zacząć pisać projekt z prawdziwego zdarzenia. Projekt nosi
nazwę Egg i jak
sama nazwa wskazuje jest zalążkiem tworzonej przez Ciebie
aplikacji. Używając go będziesz mógł stworzyć zarówno
prostą, jak i szalenie skomplikowaną aplikację. Do
niektórych jego cech należą: automatyczne reloadowanie klas
bez restartów serwera, pełna obiektowość (możliwość
tworzenia własnych komponentów w śmiesznie prosty sposób),
DRY (zasada nie powtarzania kodu w różnych miejscach), CoC
(konwencja zamiast konfiguracji) oraz możliwość łatwego
testowania tworzenego GUI (na zasadach TDD).
Wersja alpha projektu będzie dostępna w ciągu kilku dni na
serwerach Google
Code.
4 comments:
a co z frameworkiem do gier online, ktory miales pisac ?
Trochę się ostatnio pozmieniało w moim życiu - przede wszystkim nowa praca, przez co mam znacznie mniej czasu na rozwój wolnych technologii. Do napisania Egg'a jednak zmusiła mnie sytuacja jaką zastałem w nowej firmie. Potrzebuję już teraz technologii, która szybko zastąpi znienawidzonego przeze mnie JSFa. Stąd nagle taki zryw... :)
Framework do gier wciąż piszę, jednak zszedł on na drugi plan (nosi on obecnie nazwę AJAX Developer Suite i jak sama nazwa mówi nie jest już tylko do tworzenia gier). Ponadto zmieniłem technologię z Ruby na Javę (a to ze względu na to, że dla ostatnimi czasy dla Javy powstało sporo przydatnych narzędzi - tj. Jetty 6 z kontynuacjami i Google Web Toolkit. Dzięki nim zaoszczędze czasu na pisanie własnych implementacji wiszących połączeń, no i będę mógł wykorzystać bogatą biblotekę istniejących klas Javy).
W jaki sposób "znienawidziłeś JSFa"?
Co do frameworku gier - trochę mi osobiście szkoda że porzuciłeś Ruby, ale sam jestem zwolennikiem uzywania właściwych narzędzi do pracy, więc OK :-)
JavaServer Faces nie jest tym na co wszyscy czekali. Przede wszystkim tworzenie własnych komponentów w nim to katorga - zajmuje zdecydowanie za dużo czasu a efekty są mizerne. Ponadto implementacje też postawiają wiele do życzenia - między innymi niewiele mówiące komunikaty o błędach (częsty biały ekran). Do tego dochodzą trudności w debugowaniu i zbyt mała ilość standardowych komponentów (np. w core brakuje actionListener'a, który przyjmowałby wyrażenie EL).
Post a Comment