Zawiera baterie
Narzędzia Java
To jest po prostu niesamowite:
- IDE: nawet jeśli niektóre IDE obsługują JavaScript, poziom wsparcia po prostu się nie porównuje. Spróbuj refaktoryzować kod JavaScript na dużych bazach kodowych (powiedzmy 40K + LOC) i płacz.
- Testy jednostkowe: chociaż podniosły się one w ciągu ostatnich kilku lat, są też o wiele bardziej dojrzałe w świecie Java.
- Ciągła integracja i ciągła kontrola
- Generowanie dokumentacji: Na pewno masz JSDoc i kilka innych
Pisanie statyczne
Wczesne wykrywanie błędów. (Adres Google Closure podam nieco, utrzymując programistę w świecie JavaScript, jeśli wolisz).
Zoptymalizowany JavaScript
GWT pisze szybszy i bardziej kompaktowy JavaScript niż ty (dla dużych aplikacji) i pozwala określić, co zostanie wysłane do klienta prawdopodobnie łatwiej niż w przypadku równoważnych pełnych rozwiązań JS.
Architektura
Zapewnia dobre rozdzielenie problemów w przypadku dużych aplikacji, z przyzwoitymi architekturami MVC lub MVP już upieczonymi na wyciągnięcie ręki.
Przyzwoita biblioteka
GWT zapewnia interesujące biblioteki i ułatwia (dobrze, łatwiej) tworzenie aplikacji obsługujących I18N z dynamicznym ładowaniem pakietów.
Testów jednostkowych
Korzystanie z JUnit z poziomu środowiska IDE Eclipse iz wiersza polecenia. Odnosi się to do mojej pierwszej kwestii. Równie dobrze możesz użyć niektórych narzędzi jakości kodu Java w projekcie GWT (do sprawdzania źródła, a nie sprawdzania kodu bajtowego, ponieważ nie ma żadnych).
To wszystko o tobie!!
GWT nie jest dla wszystkich. To sprawia, że niektórzy ludzie są bardziej produktywni i daje dobre narzędzie dla programistów spoza JS do tworzenia profesjonalnych aplikacji internetowych z dynamicznymi interfejsami bez dotykania (za dużo) JavaScript. Ale jeśli to nie działa, po prostu użyj czegoś innego.
Jeśli chcesz większość z powyższych, ale po prostu nie chcesz Java, spójrz na Google Closure lub Dojo Toolkit .
Był wtedy dobrym pomysłem: historia ma znaczenie !!
Świat JavaScript (i ogólnie technologie front-endowe w Internecie) są obecnie bardzo aktywne, więc wszystko wygląda dobrze. Ale zaledwie kilka lat temu sprawy nie były tak jasne. LESS / SASS nie były tak popularne, jQuery nie było jeszcze de-fabryczną biblioteką JS, biblioteki JavaScript nie były odradzane co drugi tydzień, a narzędzia wcale nie były takie świetne.
Jednak już teraz rosło zapotrzebowanie na profesjonalne i duże aplikacje internetowe z dynamicznymi interfejsami, więc była luka do wypełnienia, aby zwiększyć produktywność programistów. JavaScript ma wiele pułapek i dziwactw, o których musisz wiedzieć, a może lepiej nie martwić się o nie. Stąd nisza dla narzędzi takich jak GWT.
Od tego czasu pojawiły się inne (przychodzi na myśl CoffeeScript, Dart jest w drodze, ale także duże frameworki JavaScript, rewolucja JS po stronie serwera z Node.JS i innymi oraz silny powrót JavaScript jako „wystarczająco dobrego” wszystkiego -okólny język używany nie tylko po stronie klienta, ale także w innych częściach stosu biznesowego.
Dodatkowe uwagi
W odniesieniu do twojego oryginalnego (teraz edytowanego) pytania o korzystanie z Firebug
Możesz oczywiście debugować kod GWT za pomocą Firebug, ale najlepiej debugować go bezpośrednio z debugera Eclipse IDE, który teraz zapewnia obsługę debugowania kodu na żywo.
Jednak Firebug jest nadal użyteczny, chociaż należy pamiętać, że GWT generuje zoptymalizowany i skompresowany JavaScript, który może nie być łatwy do debugowania w obecnej postaci.
W odniesieniu do twojego oryginalnego (teraz edytowanego) pytania o CSS
Tak, oczywiście nadal musisz sam napisać kod CSS. Łączysz swój projekt GWT z innymi narzędziami (takimi jak SASS), mniej lub bardziej łatwo.
To tylko narzędzie!
Nie myl GWT z tym, czym nie jest: nie piszesz kodu Java, który ma być uruchamiany bezpośrednio po stronie klienta jako bajtowy kod Java. Piszecie kod w języku Java, który jest następnie tłumaczony na JavaScript w celu zwiększenia wydajności i umożliwienia korzystania z języka wyższego poziomu (lub przynajmniej tak to powinno być postrzegane).
Prawdopodobnie Java i JavaScript można uznać za porównywalne pod względem poziomów abstrakcji. Jednak Java ma pewne zalety (wyszczególnione powyżej), stąd korzyść w czerpaniu korzyści z istniejących narzędzi bez konieczności ich ponownego pisania. Programiści Google wpadli na sprytny pomysł, aby umożliwić ponowne wykorzystanie istniejących narzędzi zorientowanych na Javę, ale w efekcie opracowanie aplikacji JavaScript.
Dodatkowo rozwiązują inny problem, którym były często kłopotliwe zarządzanie dwujęzycznymi aplikacjami internetowymi, w których JavaScript i kod Java były traktowane osobno. Zastosowanie GWT pozwala na pewien poziom konwergencji dla obu stron procesu rozwoju.
Dalsza lektura:
Po latach spędzonych na opracowywaniu aplikacji internetowej w GWT uważam, że GWT ma tak poważne wady, że nigdy więcej jej nie użyję, jeśli nie będę do tego zmuszony.
Drzewo DOM
Chociaż wydajność JavaScript może być lepsza, renderowane drzewo DOM jest często niepotrzebnie złożone. Na przykład implementacja drzewa używa ponad 13 elementów DOM, w tym <tabela> dla każdego pojedynczego elementu. Korzystanie z dużych drzew (około 10000 pozycji) po prostu zamraża przeglądarkę. Drzewo czystego JavaScript / HTML / CSS było w stanie łatwo obsłużyć taką samą liczbę elementów.
Rozwój
Nie można pobić cyklu modyfikacji i próbowania źródła czystego JavaScript / HTML / CSS. Wystarczy zapisać plik źródłowy i odświeżyć stronę w przeglądarce. Jest to kluczowy czynnik w wydajności i GWT po prostu nie może konkurować nawet przy użyciu serwera kodu.
Debugowanie JavaScript jest absolutnie łatwe i przyjemne dzięki debuggerowi Chrome lub Firebug.
Hammer Experts
Pomysł używania Java do wszystkiego jest przeznaczony dla programistów, którzy są „ekspertami od młotków”. Są mistrzami młota, więc wszystko jest gwoździem. Myślę, że takie podejście jest bardzo błędne. Korzystanie z GWT wymaga również znajomości CSS i HTML. Bez tego programiści GWT często napotykają problemy, które są prawie niemożliwe do rozwiązania, podczas gdy ktoś z doświadczeniem HTML / CSS może wymyślić rozwiązanie. Jeśli programiści potrzebują tych kompetencji, mogą to ułatwić dzięki programowaniu w HTML.
Moim zdaniem większość zalet dostarczonych przez GWT jest co najmniej wątpliwa, podczas gdy wady są znacznie poważniejsze w porównaniu do rozwoju w czystym JavaScript / HTML / CSS.
źródło
To nie jest wymiernie lepsze.
Do codziennego użytku weź pod uwagę jQuery , AmpleSDK lub kilka wypełniaczy HTML5 .
GWT ma wiele kosztów ogólnych: rzeczywistych i koncepcyjnych.
Może się przydać, jeśli masz aplikację Java lub kod Java po stronie serwera, aby przenieść go na interfejs WWW.
źródło
Kilka korzyści z używania GWT, o których myślę (więcej szczegółów przeczytaj mój blog http://www.pandurangpatil.com/2012/09/benefits-of-using-gwt.html )
Ponieważ aplikacja kliencka GWT jest napisana w Javie, daje się możliwość wychwycenia błędów składniowych w czasie kompilacji z tego samego powodu (chociaż nie obsługuje wszystkich klas JRE, ponieważ te funkcje nie są obsługiwane przez same przeglądarki). Weźmy przykład, aby zrozumieć, co mówię. W przypadku błędnego wpisania nazwy zmiennej JavaScript przy użyciu czystej biblioteki JavaScript. Jedynym sposobem na złapanie takiego błędu jest uruchomienie aplikacji i przetestowanie pod kątem pożądanych wyników. Funkcje Java, takie jak Ogólne i Adnotacje, są w pełni wykorzystywane i można ich używać w aplikacji.
Można skorzystać z istniejących dostępnych bibliotek lub napisać bibliotekę, aby z łatwością wygenerować kod zgodnie z wymaganiami, ponieważ kod, który należy wygenerować, musi znajdować się w Javie. Kompilator GWT zajmuje się jego kompilacją i konwersją na JavaScript.
Zarządzanie kodem staje się łatwiejsze.
Można po prostu napisać pewną wspólną logikę biznesową w taki sposób, aby można ją było zastosować w kodzie klienta GWT, a także w kodzie serwera, tak jak w Javie, np. Sprawdzanie poprawności danych lub niektórych typowych funkcji narzędziowych.
Za pomocą wtyczki GWT eclipse można łatwo debugować kod klienta w Javie dla logiki biznesowej.
Gdy kompilator GWT kompiluje kod Java klienta i generuje z niego JavaScript. Którego potrzebujesz wdrożyć na swoim serwerze, a na żądanie jest obsługiwany i uruchamiany w przeglądarce użytkownika. Podczas generowania tego JavaScript dokona pewnych optymalizacji.
Podczas generowania JavaScript nie bierze pod uwagę martwego kodu, kiedy mówię martwy kod, mam na myśli „kod, który istnieje, ale nie jest wywoływany z głównego przepływu”. To z kolei zmniejsza efektywny rozmiar końcowego kodu JavaScript.
Dba o zaciemnienie wygenerowanego kodu JavaScript.
Dokonuje minimalizacji wygenerowanego kodu JavaScript.
A co ważniejsze, wygeneruje on osobno zoptymalizowany kod specyficzny dla przeglądarki. Kiedy mówię osobno, wygeneruje oddzielny JavaScript specyficzny dla przeglądarki, który będzie obsługiwany, gdy odpowiednie żądanie zostanie otrzymane z danej przeglądarki. To z kolei zmniejsza rozmiar kodu JavaScript, który jest pobierany dla określonej przeglądarki, ponieważ nie zawiera całej obsługi specyficznej dla przeglądarki w jednym kodzie.
Jeśli piszesz swoją aplikację dla różnych języków, tj. Angielskiego, hindi, marathi itp., Korzystając z funkcji internacjonalizacji GWT. Podczas generowania kodu JavaScript tworzy kopię dla każdego języka i kombinacji przeglądarki. Co sprawia, że wygenerowany kod JavaScript dla danej kombinacji języka i przeglądarki jest najbardziej optymalny i mały.
W przypadku potrzeby użycia bezpośredniego JavaScript, który można wywołać z kodu Java GWT, można to zrobić za pomocą JSNI (JavaScript Native Interface). Można nawet oddzwonić do kodu Java GWT z JavaSctipt.
Jeśli chcesz ustawić strony z zakładkami, możesz skorzystać z funkcji Historia GWT.
Jeśli chcesz używać JSON jako formatu danych do komunikacji i manipulacji, ma on bardzo dobrą funkcję o nazwie Typy nakładek JavaScript.
Funkcja odroczonego wiązania GWT jest dobrą funkcją, którą, jak sądzę, można zapewnić dzięki Javie.
Możesz zbudować interfejs użytkownika, korzystając z dostępnych widżetów GWT w stylu Java Swing. Możesz nawet bardzo łatwo tworzyć niestandardowe widżety.
Jeśli chcesz zbudować interfejs użytkownika (strony internetowe) w czystym stylu HTML, możesz skorzystać z funkcji deklaratywnego interfejsu użytkownika GWT. Które uważam za jedną z głównych cech GWT. Co ułatwia programistom tworzenie stron w czystym stylu HTML. Wydaje mi się, że jest łatwiejsze do utrzymania niż kodowanie w stylu Swing. Co najważniejsze, nadal możesz mieć swoją logikę w Javie, a tylko część prezentacji w czystym HTML. (Uwaga: jakąkolwiek metodę użyjesz (deklaratywny interfejs użytkownika lub styl Swing) ostatecznie będzie to tylko HTML, ale to, co robi różnicę, to sposób, w jaki ją kodujesz i utrzymujesz).
Funkcja pakietu klienta GWT ułatwia zarządzanie innymi zasobami internetowymi, takimi jak css, obrazy i inna zawartość tekstowa.
Widżety komórkowe: Aby zaprezentować paginowane zbieranie danych, GWT posiada Widżety komórkowe. Istnieją widżety, takie jak CellTable, CellList, CellTree i CellBrowser.
Komunikacja z serwerem z kodu klienta GWT. Obsługuje wiele sposobów implementacji komunikacji klient-serwer.
Jeśli nie obawiasz się protokołu używanego do przesyłania danych, to mechanizm GWT RPC. Bardzo łatwo jest zintegrować kod po stronie klienta do przesyłania danych z serwerem. Możesz zdefiniować niestandardowe DTO (obiekt przesyłania danych) w kodzie klienta, którego można nawet użyć w kodzie po stronie serwera. Implementacja po stronie serwera akceptuje te same DTO jako parametr lub wartość zwracaną. Wszystko inne jest obsługiwane przez ramkę GWT RPC. Nawet propaguje wyjątki zgłaszane z kodu po stronie serwera do dzwoniącego w kodzie po stronie klienta (pod warunkiem, że musisz zdefiniować te klasy wyjątków w pakiecie kodu po stronie klienta. GWT RPC wewnętrznie wykorzystuje połączenia AJAX z własnym niestandardowym protokołem do przesyłania danych.
Jeśli nie chcesz używać GWT RPC, możesz wykonywać wywołania serwera AJAX w celu pobierania danych z serwera za pomocą Kreatora żądań. Co jest również znacznie łatwiejsze do wdrożenia. Ma również ciekawą funkcję Fabryka zapytań. Dzięki tej funkcji możesz ustawić swoją DAO lub warstwę usługową na wywołanie z kodu klienta. Aby to zrobić, musisz zdefiniować kilka zestawów interfejsów dla swojej usługi i niestandardowych typów danych. Za pomocą tych interfejsów można uzyskać dostęp do tych usług z kodu klienta. Napisałem wtyczkę maven do wygenerowania tych interfejsów. Jeśli adnotujesz swoją warstwę DAO za pomocą niektórych wymaganych adnotacji, zapoznaj się ( https://github.com/pandurangpatil/gwt-mvn-helper) zapoznaj się z modułem mvn-helper-test w celu użycia. Fabryka żądań jest bardziej ukierunkowana na integrację z warstwą ORM, taką jak JDO lub JPA na serwerze. Ma obsługę wywoływania stałego na danym obiekcie z kodu klienta. I najważniejsze, gdy wywołasz metodę persist, oblicza i wysyła tylko zmiany (delta) do serwera, aby zapisać.
Jeśli chcesz wykonać połączenie JSONP między domenami, możesz zrobić to samo.
źródło