Jestem zarówno dobry, jak i zły, aby odpowiedzieć na to pytanie - dobrze, ponieważ faktycznie go użyłem wcześniej, i źle, ponieważ miałem dość doświadczenia z HTML / CSS / JavaScript przed pracą z GWT. To spowodowało, że oszalałem na punkcie korzystania z GWT w sposób, w jaki mogli nie być inni programiści Java, którzy tak naprawdę nie znają DHTML.
GWT robi to, co mówi - wyodrębnia JavaScript i do pewnego stopnia HTML na Javę. Dla wielu programistów brzmi to znakomicie. Wiemy jednak, jak to ujął Jeff Atwood, że wszystkie abstrakcje są abstrakcjami nieudanymi (warto przeczytać, jeśli wziąć pod uwagę GWT). W przypadku GWT powoduje to w szczególności następujące problemy:
Używanie HTMLa w GWT jest do kitu.
Tak jak powiedziałem, do pewnego stopnia nawet streszcza HTML. Brzmi dobrze dla programisty Java. Ale nie jest. HTML to format znaczników dokumentów. Jeśli chcesz utworzyć obiekty Java w celu zdefiniowania dokumentu, nie użyłbyś elementów znaczników dokumentu. To jest szalenie gadatliwe. Nie jest również wystarczająco kontrolowany. W HTML istnieje zasadniczo jeden sposób pisania <p>Hello how are <b>you</b>?</p>
. W GWT masz 3 węzły podrzędne (tekst B
, tekst) dołączone do P
węzła. Możesz najpierw utworzyć P lub najpierw utworzyć węzły potomne. Jeden z węzłów potomnych może być wynikiem funkcji. Po kilku miesiącach programowania z wieloma programistami próba rozszyfrowania wyglądu dokumentu HTML przez śledzenie kodu GWT jest procesem wywołującym ból głowy.
Ostatecznie zespół zdecydował, że być może użycie HTMLPanel dla wszystkich HTML jest właściwą drogą. Teraz straciłeś wiele zalet GWT polegających na tym, że elementy kodu Java są łatwo dostępne do łatwego wiązania danych.
Używanie CSS w GWT jest do bani.
Przez dołączenie do abstrakcji HTML oznacza to, że sposób korzystania z CSS jest również inny. Mogło się poprawić, odkąd ostatni raz użyłem GWT (około 9 miesięcy temu), ale w tym czasie obsługa CSS była nieładna. Ze względu na sposób, w jaki GWT sprawia, że tworzysz HTML, często masz poziomy węzłów, o których nie wiesz, że zostały wstrzyknięte (każdy programista CSS wie, jak to może dramatycznie wpłynąć na renderowanie). Istnieje zbyt wiele sposobów osadzania lub łączenia CSS, co powoduje mylący bałagan przestrzeni nazw. Poza tym miałeś wsparcie dla sprite, które znowu brzmi dobrze, ale faktycznie zmutowało twój CSS i mieliśmy problemy z pisaniem właściwości, które następnie musieliśmy wyraźnie zastąpić później, lub w niektórych przypadkach udaremnialiśmy nasze próby dopasowania naszej ręki - zakodowałem CSS i po prostu przeprojektowałem go w taki sposób, aby GWT tego nie zepsuło.
Unia problemów, przecięcie korzyści
Każdy język będzie miał swój własny zestaw problemów i korzyści. Niezależnie od tego, czy go używasz, jest to ważona formuła oparta na tych. Kiedy masz abstrakcję, otrzymujesz połączenie wszystkich problemów i skrzyżowanie korzyści. JavaScript ma swoje problemy i jest często wyśmiewany przez inżynierów po stronie serwera, ale ma też sporo funkcji, które są pomocne w szybkim tworzeniu stron internetowych. Pomyśl o zamknięciach, stenografii składniowej, obiektach ad-hoc, o wszystkich czynnościach wykonywanych przez Jquery (jak zapytania DOM przez selektor CSS). Teraz zapomnij o użyciu go w GWT!
Rozdzielenie obaw
Wszyscy wiemy, że wraz ze wzrostem wielkości projektu zasadnicze znaczenie ma właściwe rozdzielenie problemów. Jednym z najważniejszych jest oddzielenie wyświetlania od przetwarzania. GWT bardzo to utrudniło. Prawdopodobnie nie jest to niemożliwe, ale zespół, w którym pracowałem, nigdy nie wpadł na dobre rozwiązanie, a nawet gdy myśleliśmy, że tak, zawsze jedno przeciekało do drugiego.
Desktop! = Internet
Jak napisał @Berin Loritsch w komentarzach, model lub sposób myślenia GWT jest zbudowany dla żywych aplikacji, w których program ma żywy obraz ściśle powiązany z silnikiem przetwarzania. Brzmi dobrze, ponieważ tak wielu uważa, że brakuje sieci. Ale są dwa problemy: A) Sieć oparta jest na HTTP i jest to z natury różne. Jak wspomniałem powyżej, technologie oparte na HTTP - HTML, CSS, a nawet ładowanie zasobów i buforowanie (obrazy itp.) Zostały stworzone dla tej platformy. B) Programiści Java, którzy pracowali w Internecie, nie łatwo przełączają się na takie podejście do aplikacji komputerowych. Architektura na tym świecie to zupełnie inna dyscyplina. Programiści Flex prawdopodobnie bardziej pasowaliby do GWT niż programiści Java.
Podsumowując ...
GWT jest w stanie dość szybko tworzyć szybko i brudne aplikacje AJAX przy użyciu samej Javy. Jeśli szybkie i brudne nie brzmią tak, jak chcesz, nie używaj ich. Firma, w której pracowałem, była firmą, która bardzo troszczyła się o produkt końcowy, i ma poczucie polskości, zarówno wizualnej, jak i interaktywnej dla użytkownika. Dla nas, czołowych programistów, oznaczało to, że musieliśmy kontrolować HTML, CSS i JavaScript w sposób, który sprawił, że używanie GWT przypominało próbę gry na pianinie w rękawicach bokserskich.