J'envisage d'utiliser GWT dans un grand projet de développement d'applications Web en interne, à savoir que l'avantage principal à mes yeux est la compilation croisée vers Javascript qui aiderait (au moins théoriquement) mon équipe à réduire la taille de la pile technologique d'une unité. .
Cependant, après avoir été gravé auparavant (comme la plupart des développeurs), j'aimerais entendre des programmeurs qui l'ont effectivement utilisé pour tout problème avec GWT qui gênerait ou limiterait son utilisation dans un certain domaine de problème.
Quels sont les arguments contre l'utilisation de GWT et pourquoi?
Je suis à la fois bon et mauvais pour répondre à cette question - bon, dans la mesure où je l'ai déjà utilisé auparavant, et mauvais, dans la mesure où j'étais assez expérimenté avec HTML/CSS/JavaScript avant de travailler avec GWT. Cela m'a rendu fou en utilisant GWT d'une manière que d'autres développeurs Java qui ne connaissent pas vraiment DHTML ne l'ont peut-être pas été.
GWT fait ce qu'il dit - il résume JavaScript et dans une certaine mesure HTML en Java. Pour de nombreux développeurs, cela semble génial. Cependant, nous savons, comme le dit Jeff Atwood, toutes les abstractions sont des abstractions ayant échoué (vaut la peine d'être lu si l'on considère GWT). Avec GWT, cela introduit spécifiquement les problèmes suivants:
Comme je l'ai dit, dans une certaine mesure, même l'abstrait du HTML. Cela semble bon pour un développeur Java. Mais ce n'est pas le cas. HTML est un format de balisage de document. Si vous vouliez créer des objets Java pour définir un document, vous n'utiliserait pas d'éléments de balisage de document. Il est exagérément verbeux. Il n'est pas non plus suffisamment contrôlé. En HTML, il existe essentiellement une façon d'écrire <p>Hello how are <b>you</b>?</p>
. Dans GWT, vous avez 3 nœuds enfants (texte, B
, texte) attachés à un nœud P
. Vous pouvez soit créer le P en premier, soit créer les nœuds enfants en premier. L'un des nœuds enfants peut être le résultat de retour d'une fonction. Après quelques mois de développement avec de nombreux développeurs, essayer de déchiffrer à quoi ressemble votre document HTML en traçant votre code GWT est un processus induisant des maux de tête.
En fin de compte, l'équipe a décidé que peut-être utiliser HTMLPanel pour tout le HTML était la bonne solution. Maintenant, vous avez perdu de nombreux avantages de GWT d'avoir des éléments facilement disponibles pour Java code pour se lier facilement pour les données.
Par attachement à l'abstraction HTML, cela signifie que la façon dont vous devez utiliser CSS est également différente. Cela aurait pu s'améliorer depuis la dernière fois que j'ai utilisé GWT (il y a environ 9 mois), mais à l'époque, le support CSS était un gâchis. En raison de la façon dont GWT vous fait créer du HTML, vous avez souvent des niveaux de nœuds dont vous ne saviez pas qu'ils ont été injectés (tout développeur CSS sait comment cela peut affecter considérablement le rendu). Il y avait trop de façons d'incorporer ou de lier CSS, ce qui entraînait un désordre confus d'espaces de noms. En plus de cela, vous aviez le support Sprite, qui sonne encore une fois Nice, mais a en fait muté votre CSS et nous avons eu des problèmes avec ses propriétés d'écriture que nous avons ensuite dû écraser explicitement plus tard, ou dans certains cas, contrecarré nos tentatives de faire correspondre notre main - CSS codé et avoir juste à le repenser de manière que GWT ne l'ait pas foiré.
Toutes les langues auront leur propre ensemble de problèmes et d'avantages. Que vous l'utilisiez est une formule pondérée basée sur ceux-ci. Lorsque vous avez une abstraction, vous obtenez une union de tous les problèmes et une intersection des avantages. JavaScript a ses problèmes et est souvent tourné en dérision parmi les ingénieurs côté serveur, mais il possède également un certain nombre de fonctionnalités qui sont utiles pour un développement Web rapide. Pensez aux fermetures, à la raccourci syntaxique, aux objets ad-hoc, toutes les choses faites par Jquery (comme les requêtes DOM par le sélecteur CSS). Maintenant, oubliez de l'utiliser dans GWT!
Nous savons tous qu'à mesure que la taille d'un projet augmente, il est essentiel d'avoir une bonne séparation des préoccupations. L'un des plus importants est la séparation entre l'affichage et le traitement. GWT a rendu cela très difficile. Probablement pas impossible, mais l'équipe dans laquelle je faisais n'a jamais trouvé de bonne solution, et même quand nous pensions que nous l'avions fait, nous avions toujours une fuite dans l'autre.
Comme @Berin Loritsch l'a signalé dans les commentaires, le modèle ou l'état d'esprit GWT est conçu pour des applications vivantes, où un programme a un affichage vivant étroitement couplé à un moteur de traitement. Cela semble bien parce que c'est ce que beaucoup pensent que le Web fait défaut. Mais il y a deux problèmes: A) Le Web est construit sur HTTP et c'est intrinsèquement différent. Comme je l'ai mentionné ci-dessus, les technologies basées sur HTTP - HTML, CSS, même le chargement et la mise en cache des ressources (images, etc.), ont été construites pour cette plate-forme. B) Java qui ont travaillé sur le Web ne passent pas facilement à cet état d'esprit d'application de bureau. Architecture dans ce monde est une discipline entièrement différente. Les développeurs Flex seraient probablement plus adaptés à GWT que Java développeurs Web.
GWT est capable de produire des applications rapides AJAX assez facilement en utilisant uniquement Java. Si la fonction quick-and-dirty ne ressemble pas à ce que vous voulez, ne l'utilisez pas. La société Je travaillais pour une entreprise qui se souciait beaucoup du produit final, et c'est un sens du polissage, à la fois visuel et interactif, pour l'utilisateur. Pour nous, développeurs frontaux, cela signifiait que nous devions contrôler HTML, CSS et JavaScript d'une manière qui rend l'utilisation de GWT comme essayer de jouer du piano avec des gants de boxe.
Nous utilisons GWT pour une grande application Web d'administration en ligne (SOA dans le backend) qui a un usage intensif. L'ancienne interface utilisateur était en DHTML mais nous avions des problèmes avec la compatibilité du navigateur, l'optimisation des performances et le processus de développement, nous avons donc cherché des alternatives.
Nos exigences ont été:
Nous avons choisi GWT et je ne le regrette jamais. La nouvelle équipe n'avait pas ou moins d'expérience DHMTL et donc le processus de développement Java de GWT a été très utile. Ce que vous obtenez de la boîte est:
Notre application émet une seule demande au serveur au démarrage. Le côté négatif est que GWT (et aussi Android) ont un mauvais design hors de la boîte, mais de toute façon si vous appliquez votre propre apparence et que vous pensez que vous devez adapter le CSS. Alternativement, vous pouvez utiliser diverses bibliothèques de composants pour GWT qui facilitent l'application des styles et des thèmes appropriés.
Pour moi, il est inutile que le DOM HTML ne soit pas aussi bon que celui fait à la main, cela n'a jamais été un problème. Lorsque je développe en C++, je ne regarde pas le code assembleur généré. Quand je développe dans GWT, il n'y a jamais eu de raison pour moi de regarder le code JS et une seule fois une raison de regarder le DOM et de faire un refactoring.
Pour moi, GWT est le seul choix en matière de développement de RIA et j'espère que GWT a un brillant avenir. Voir l'énoncé de mission sur:
[1] http://code.google.com/intl/de-DE/webtoolkit/makinggwtbetter.html#introduction
Mais il ne faut pas oublier que Google n'utilise pas GWT sur bon nombre de leurs projets internes et qu'en ce moment il y a des rumeurs sur l'avenir de GWT, voir
[2] http://googlewebtoolkit.blogspot.com/2011/11/gwt-and-Dart.html
[3] https://plus.google.com/105933370793992913359/posts/bLfSagtziBC