
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