Sou bom e mau em responder a essa pergunta - bom, porque realmente o usei antes, e ruim, por ter bastante experiência com HTML / CSS / JavaScript antes de trabalhar com o GWT. Isso me deixou enlouquecido ao usar o GWT de uma maneira que outros desenvolvedores Java que realmente não conhecem DHTML podem não ter.
O GWT faz o que diz - abstrai JavaScript e, até certo ponto, HTML em Java. Para muitos desenvolvedores, isso parece brilhante. No entanto, sabemos, como Jeff Atwood coloca, todas as abstrações são abstrações com falha (vale a pena ler se considerarmos o GWT). Com o GWT, isso introduz especificamente os seguintes problemas:
Usar HTML no GWT é uma porcaria.
Como eu disse, até certo ponto, até abstrai o HTML. Parece bom para um desenvolvedor Java. Mas isso não. HTML é um formato de marcação de documento. Se você quisesse criar objetos Java para definir um documento, não usaria elementos de marcação de documento. É enlouquecedoramente detalhado. Também não é controlado o suficiente. No HTML, existe essencialmente uma maneira de escrever <p>Hello how are <b>you</b>?</p>
. No GWT, você tem 3 nós filhos (texto B
, texto) anexados a um P
nó. Você pode criar o P primeiro ou criar os nós filhos primeiro. Um dos nós filhos pode ser o resultado de retorno de uma função. Após alguns meses de desenvolvimento com muitos desenvolvedores, tentar decifrar a aparência do seu documento HTML rastreando seu código GWT é um processo indutor de dor de cabeça.
No final, a equipe decidiu que talvez usar o HTMLPanel para todo o HTML fosse o caminho certo a seguir. Agora, você perdeu muitas das vantagens da GWT de ter elementos prontamente disponíveis no código Java para vincular facilmente os dados.
Usar CSS no GWT é uma porcaria.
Por anexo à abstração HTML, isso significa que a maneira como você deve usar CSS também é diferente. Pode ter melhorado desde a última vez que usei o GWT (cerca de 9 meses atrás), mas na época, o suporte ao CSS era uma bagunça. Devido à maneira como o GWT faz você criar HTML, geralmente você tem níveis de nós que você não sabia que foram injetados (qualquer desenvolvedor CSS sabe como isso pode afetar drasticamente a renderização). Havia muitas maneiras de incorporar ou vincular CSS, resultando em uma confusão de espaços para nome. Além disso, você tinha o suporte a sprite, o que novamente soa legal, mas na verdade modificou seu CSS e tivemos problemas com a criação de propriedades que precisávamos sobrescrever explicitamente mais tarde ou, em alguns casos, frustraram nossas tentativas de combinar com nossa mão. codificado em CSS e tendo que apenas reprojetá-lo de maneira que o GWT não estragasse tudo.
União de problemas, interseção de benefícios
Qualquer idioma terá seu próprio conjunto de problemas e benefícios. Se você o usa, é uma fórmula ponderada com base naqueles. Quando você tem uma abstração, obtém uma união de todos os problemas e uma interseção dos benefícios. O JavaScript tem seus problemas e é comumente ridicularizado entre os engenheiros do lado do servidor, mas também possui alguns recursos úteis para o rápido desenvolvimento da Web. Pense em fechamentos, abreviações de sintaxe, objetos ad-hoc, todo o material feito pelo Jquery (como a consulta DOM pelo seletor CSS). Agora esqueça de usá-lo no GWT!
Separação de preocupações
Todos sabemos que, à medida que o tamanho de um projeto aumenta, é essencial ter uma boa separação de preocupações. Uma das mais importantes é a separação entre exibição e processamento. A GWT tornou isso muito difícil. Provavelmente não é impossível, mas a equipe que eu fazia nunca teve uma boa solução e, mesmo quando pensávamos que tínhamos, sempre tínhamos um vazando no outro.
Área de trabalho! = Web
Como o @Berin Loritsch postou nos comentários, o modelo ou mentalidade para o qual o GWT é desenvolvido é para aplicativos vivos, em que um programa tem um monitor ativo firmemente acoplado a um mecanismo de processamento. Parece bom, porque é isso que muitos acham que falta na web. Mas existem dois problemas: A) A web é construída em HTTP e isso é inerentemente diferente. Como mencionei acima, as tecnologias criadas em HTTP - HTML, CSS, até carregamento de recursos e cache (imagens etc.), foram criadas para essa plataforma. B) Os desenvolvedores Java que estão trabalhando na Web não mudam facilmente para essa mentalidade de aplicativo de desktop. A arquitetura neste mundo é uma disciplina totalmente diferente. Os desenvolvedores Flex provavelmente seriam mais adequados ao GWT do que os desenvolvedores da Web Java.
Em conclusão...
O GWT é capaz de produzir aplicativos AJAX rápidos e sujos com bastante facilidade usando apenas Java. Se rápido e sujo não soa como o que você deseja, não o use. A empresa em que eu trabalhava era uma empresa que se importava muito com o produto final, e seu senso de polimento, visual e interativo, para o usuário. Para nós, desenvolvedores de front-end, isso significava que precisávamos controlar HTML, CSS e JavaScript de maneiras que tornavam o uso do GWT uma tentativa de tocar piano com luvas de boxe.