Sono sia buono che cattivo a rispondere a questa domanda - buono, in quanto l'ho effettivamente usato prima, e cattivo, in quanto ero abbastanza esperto con HTML / CSS / JavaScript prima di lavorare con GWT. Questo mi ha lasciato impazzito usando GWT in un modo che altri sviluppatori Java che non conoscono davvero DHTML potrebbero non esserlo.
GWT fa quello che dice: estrae JavaScript e in una certa misura HTML in Java. Per molti sviluppatori, questo sembra brillante. Tuttavia, sappiamo, come afferma Jeff Atwood, tutte le astrazioni sono astrazioni fallite (vale la pena leggere se si considera GWT). Con GWT, ciò introduce specificamente i seguenti problemi:
L'uso di HTML in GWT fa schifo.
Come ho già detto, in una certa misura, astrae persino l'HTML. Sembra buono per uno sviluppatore Java. Ma non lo è. HTML è un formato di markup del documento. Se si desidera creare oggetti Java per definire un documento, non utilizzare gli elementi di markup del documento. È esasperatamente prolisso. Inoltre non è abbastanza controllato. In HTML esiste essenzialmente un modo per scrivere <p>Hello how are <b>you</b>?</p>
. In GWT, hai 3 nodi figlio (testo B
, testo) collegati a un P
nodo. È possibile creare prima la P o creare prima i nodi figlio. Uno dei nodi figlio potrebbe essere il risultato di ritorno di una funzione. Dopo alcuni mesi di sviluppo con molti sviluppatori, provare a decifrare l'aspetto del documento HTML tracciando il codice GWT è un processo che induce mal di testa.
Alla fine, il team ha deciso che forse usare HTMLPanel per tutto l'HTML era la strada giusta da percorrere. Ora, hai perso molti dei vantaggi di GWT di avere elementi prontamente disponibili al codice Java per legare facilmente i dati.
L'uso dei CSS in GWT fa schifo.
In allegato all'astrazione HTML, ciò significa che anche il modo in cui devi usare i CSS è diverso. Potrebbe essere migliorato dall'ultima volta che ho usato GWT (circa 9 mesi fa), ma al momento il supporto CSS era un disastro. A causa del modo in cui GWT ti fa creare HTML, spesso hai livelli di nodi che non sapevi fossero iniettati (qualsiasi sviluppatore CSS sa come questo può influenzare notevolmente il rendering). C'erano troppi modi per incorporare o collegare i CSS, risultando in un disordine confuso di spazi dei nomi. Inoltre, hai avuto il supporto sprite, che suona di nuovo bene, ma in realtà ha mutato il tuo CSS e abbiamo avuto problemi con la scrittura di proprietà che poi abbiamo dovuto sovrascrivere esplicitamente in seguito, o in alcuni casi, abbiamo contrastato i nostri tentativi di abbinare la nostra mano- CSS codificato e doverlo semplicemente ridisegnare in modo che GWT non lo abbia rovinato.
Unione di problemi, intersezione di benefici
Qualsiasi lingua avrà il proprio insieme di problemi e benefici. Se lo usi è una formula ponderata basata su quelli. Quando hai un'astrazione, quello che ottieni è l'unione di tutti i problemi e un'intersezione dei benefici. JavaScript ha i suoi problemi ed è comunemente deriso dagli ingegneri lato server, ma ha anche alcune funzionalità utili per un rapido sviluppo web. Pensa alle chiusure, alla stenografia della sintassi, agli oggetti ad hoc, a tutto il materiale fatto da Jquery (come le query DOM tramite il selettore CSS). Ora dimentica di usarlo in GWT!
Separazione degli interessi
Sappiamo tutti che al crescere delle dimensioni di un progetto, è fondamentale avere una buona separazione delle preoccupazioni. Uno dei più importanti è la separazione tra visualizzazione ed elaborazione. GWT lo ha reso davvero difficile. Probabilmente non impossibile, ma la squadra in cui ero in squadra non ha mai trovato una buona soluzione, e anche quando pensavamo di avere, ne abbiamo sempre avuto uno che si perdeva nell'altro.
Desktop! = Web
Come @Berin Loritsch ha postato nei commenti, il modello o la mentalità per cui GWT è costruito sono applicazioni viventi, in cui un programma ha un display vivente strettamente accoppiato a un motore di elaborazione. Questo suona bene perché è quello che molti pensano che manchi al web. Ma ci sono due problemi: A) Il web è basato su HTTP e questo è intrinsecamente diverso. Come ho accennato in precedenza, le tecnologie basate su HTTP - HTML, CSS, persino caricamento delle risorse e memorizzazione nella cache (immagini, ecc.), Sono state sviluppate per quella piattaforma. B) Gli sviluppatori Java che hanno lavorato sul web non passano facilmente a questa mentalità dell'applicazione desktop. L'architettura in questo mondo è una disciplina completamente diversa. Gli sviluppatori Flex sarebbero probabilmente più adatti a GWT rispetto agli sviluppatori Web Java.
In conclusione...
GWT è in grado di produrre applicazioni AJAX veloci e sporche abbastanza facilmente usando solo Java. Se quick-and-dirty non suona come quello che vuoi, non usarlo. La società per la quale lavoravo era una società che teneva molto al prodotto finale, ed è un senso di lucidità, sia visiva che interattiva, per l'utente. Per noi sviluppatori front-end, questo significava che dovevamo controllare HTML, CSS e JavaScript in modi che rendessero l'utilizzo di GWT come provare a suonare il pianoforte con i guantoni da boxe.