czwartek, 12 listopada 2009

Google Web Toolkit - wzorce projektowe, biblioteki komponentów

Zaczynając pracę nad nowym projektem warto zastanowić się na samym początku jakie wzorce projektowe będziemy wykorzystywać w tymże projekcie oraz jakich użyjemy zewnętrznych biobliotek. Kiedy zacząłem pisać aplikacje w GWT, po przyjrzeniu się komponentom które są dostarczane wraz z toolkitem doszedłem do wniosku że aby osiągnąć cel który sobie postawiliśmy, musielibyśmy sporo komponentów bądź używając terminologii GWT widgetów napisać sami.
Nie mieliśmy na to ani czasu ani potrzebnych zasobów zarówno osobowych jak i finansowych (ja sam natomiast miałem już dość pisania w javascript, kiedy to w poprzednim projekcie musieliśmy sporo komponentów jsf napisać sami) w związku z tym postanowiliśmy poszukać gotowej biblioteki komponentów. Wtedy wybór był tylko pomiędzy czystym GWT, widgetami z GWT IncubatorGWT Ext oraz Ext GWT.

Te dwie ostatnie wydają się być do siebie bardzo zbliżone. I tak rzeczywiście jest przynajmniej jeśli chodzi o wygląd GUI. Również nazwa tych bibliotek jest zbliżona. Otóż GWT Ext bazuje na bibliotece Ext JS, jest ona w zasadzie wrapperem tej bioblioteki, nie jest to zgodne w pełni ze specyfikacją GWT. Kod javascript jest w zewnętrznych plikach js. Jednakże takie podejście umożliwiło bardzo szybko zbudować potężny zbiór komponentów. Z kolei Ext GWT jest produktem firmowanym przez producenta biblioteki Ext JS, jednakże w odróżnieniu od GWT Ext jest to biblioteka natywnych komponentów GWT. Z Ext JS łączy ją podobny interfejs użytkownika oraz funkcjonalność komponentów.

Niestety ilość dostępnych komponentów nie jest tak duża jak w przypadku Ext JS, co jest zrozumiałe, programiści musieli napisać każdy komponent praktycznie od zera, wzorując się na funkcjonalności i wyglądzie Ext JS, które powstaje już od dobrych paru lat i trochę chyba jeszcze wody w Wiśle upłynie zanim Ext GWT osiągnie funkcjonalność Ext JS.
Producent Ext JS decydując się na rozpoczęcie prac nad własnymi komponetami GWT zmienił licencję Ext JS, uniemożliwiając praktycznie dalszy rozwój GWT Ext, w chwili obecnej bazuje on na wersji 2.0.2 Ext JS, a ostatni opublikowana wersja pochodzi z grudnia 2008 roku.
Z powodu zmiany licencji twórca GWT Ext rozpoczął prace nad Smart GWT, która opiera się na bibliotece javascript Smart Client.

My wybierając bibliotekę mieliśmy wybór między GWT IncubatorGWT Ext oraz Ext GWTSmart GWT jeszcze wtedy nie było dostępne. Wybór padł więc Ext GWT głównie ze względu na przekonanie że firma która wyprodukowała tak świetny produkt jak Ext JS, również z Ext GWT nas nie zawiedzie. Drugim powodem był fakt że rozwój GWT Ext został wstrzymany, ze względu na zmianę licencji Ext JS.

W chwili obecnej nie mamy możliwości zmiany biblioteki, prace są zbyt zaawansowane jednakże gdybym stanął przed ponownym wyborem przyjrzałbym się bliżej Smart GWT.

Główne zarzuty do Ext GWT to :
  • brak wsparcia dla wzorca Model-View-Presenter, (głównie w postaci wprowadzenia własnego wzorca Model-View-Controller, Dispatchera oraz braku implementacji podstawowych interfejsów np. HasValue, HasClickHandlers etc)
  • słaba dokumentacja zwłaszcza uparcie forsowanego rozwiązania MVC
Plusy natomiast to :
  • dwa rodzaje licencji GPL i komercyjna
  • natywne widgety GWT, brak zależności od zewnętrznych blibliotek javascript
  • niewygórowana cena
  • stabilne działanie
  • bardzo dobre wsparcie
  • obecne komponenty są stabilne i bardzo seksi
Ostatni argument wydaje się być śmieszny ale żyjemy w takich czasach kiedy sprzedaje się produkt który nie tylko ma funkcjonalność spełniającą nasze oczekiwania ale również wygląda nowocześnie i elegancko. W tym względzie w moim subiektywnym odczuciu Ext GWT nadal ma dużą przewagą nad Smart GWT.

Jak widać w minusach wymieniłem głównie kłopoty z MVC, przynajmniej w naszym projekcie który jest złożony z wielu modułów, model mvc nie sprawdza się zbyt dobrze. Dlatego szukaliśmy jakiegoś lepszego wzorca programowania i oczywiście z pomocą przyszło google, które na tegorocznej konferencji Google I/O przedstawiło wzorzec Model-View-Presenter który postanowiliśmy wdrożyć w naszej aplikacji. Dla zainteresowanych bardzo ciekawy film prezentujący MVP

Brak komentarzy:

Prześlij komentarz