Batteries incluses
Outillage Java
C'est tout simplement génial:
- IDE: même si certains IDE prennent en charge JavaScript, le niveau de support n'est tout simplement pas comparable. Essayez de refactoriser le code JavaScript sur de grandes bases de code (disons, 40K + LOC) et pleurez.
- Tests unitaires: bien que cela ait repris au cours des dernières années, il est également beaucoup plus mature dans le monde Java.
- Intégration continue et inspection continue
- Génération de documentation: vous avez bien sûr JSDoc et quelques autres
Typage statique
Il détecte les bogues tôt. (Google Closure adresse cela un peu tout en gardant le développeur dans le monde JavaScript, si vous préférez).
JavaScript optimisé
GWT écrit du JavaScript plus rapide et plus compact que vous (pour les grandes applications) et vous permet de déterminer ce qui est envoyé au client sans doute plus facilement qu'avec des solutions JS complètes équivalentes.
Architecture
Il offre une bonne séparation des préoccupations pour les grandes applications, avec des architectures MVC ou MVP décentes déjà précuites au bout de vos doigts.
Bibliothèque décente
GWT fournit des bibliothèques intéressantes et facilite (enfin, plus facilement) la création d'applications compatibles I18N avec un chargement de bundle dynamique.
Tests unitaires
Utilisation de JUnit depuis Eclipse IDE et depuis la ligne de commande. Cela concerne mon premier point. Vous pourriez très bien également utiliser certains des outils de qualité de code Java sur un projet GWT (pour les vérifications de source, pas les vérifications de bytecode, car il n'y en a pas).
Tout dépend de vous!!
GWT n'est pas pour tout le monde. Cela rend certaines personnes plus productives et donne un bon outil aux développeurs non JS pour créer des applications Web professionnelles avec des frontaux dynamiques sans toucher (trop) à JavaScript. Mais si cela ne fonctionne pas pour vous, utilisez simplement autre chose.
Si vous voulez la plupart des éléments ci-dessus mais que vous ne voulez tout simplement pas Java, regardez peut-être Google Closure ou le Dojo Toolkit .
C'était une bonne idée à l'époque: l'histoire compte !!
Le monde JavaScript (et les technologies Web frontales en général) est extrêmement actif de nos jours, donc les choses s'améliorent. Mais il y a seulement quelques années, les choses n'étaient pas si brillantes. LESS / SASS n'était pas si populaire, jQuery n'était pas encore la bibliothèque JS de sortie d'usine, les bibliothèques JavaScript n'étaient pas générées toutes les deux semaines et l'outillage n'était pas génial en général.
Mais il y avait déjà une demande croissante pour des applications Web professionnelles et volumineuses avec des frontaux dynamiques, il y avait donc une lacune à combler pour rendre les développeurs plus productifs. JavaScript a de nombreux pièges et bizarreries dont vous devez être conscient, et il est peut-être préférable de ne même pas avoir à s'en soucier. D'où la niche des outils comme GWT.
Depuis, d'autres sont apparus (CoffeeScript me vient à l'esprit, Dart est en route, mais aussi de grands frameworks JavaScript, la révolution du JS côté serveur avec Node.JS et autres, et un retour en force pour JavaScript comme «assez bon» tout -langage à utiliser non seulement côté client mais également dans d'autres parties de votre pile métier.
Notes complémentaires
En ce qui concerne votre question originale (maintenant éditée) sur l'utilisation de Firebug
Vous pouvez déboguer du code GWT avec Firebug bien sûr, mais idéalement, vous devriez le déboguer directement à partir du débogueur de l'IDE Eclipse, qui fournit désormais une prise en charge du débogage de code en direct.
Cependant, Firebug est toujours utilisable, mais vous devez garder à l'esprit que GWT génère du JavaScript optimisé et compressé, ce qui peut ne pas être facile à déboguer tel quel.
Concernant votre question originale (maintenant éditée) sur CSS
Oui, vous devez toujours écrire le code CSS vous-même, bien sûr. Vous associez votre projet GWT à d'autres outils (comme SASS), plus ou moins facilement.
Ce n'est qu'un outil!
Ne confondez pas GWT avec ce qu'il n'est pas: vous n'écrivez pas de code Java à exécuter directement côté client en tant que bytecode Java. Vous écrivez du code dans le langage Java, qui est ensuite traduit en JavaScript pour plus d'efficacité et pour vous permettre d'utiliser un langage de niveau supérieur (ou, du moins, c'est ainsi que cela doit être vu).
Sans doute , Java et JavaScript pourraient être considérés comme comparables en termes de niveaux d'abstraction. Cependant, Java présente certains avantages (détaillés ci-dessus), d'où l'avantage de profiter des avantages des outils existants sans avoir à les réécrire. Les développeurs de Google ont juste eu la bonne idée de permettre de réutiliser les outils orientés Java existants, mais de développer en effet des applications JavaScript.
De plus, ils résolvent un autre problème, qui était la gestion souvent lourde des applications Web bilingues où le code JavaScript et Java était traité séparément. L'utilisation de GWT permet un certain niveau de convergence pour les deux côtés du processus de développement.
Lectures complémentaires:
Après avoir passé des années à développer une application Web dans GWT, mon opinion est que GWT présente des inconvénients si graves que je ne l'utiliserais plus si je n'y suis pas obligé.
Arbre DOM
Bien que les performances JavaScript puissent être meilleures, l'arborescence DOM rendue est souvent inutilement complexe. Par exemple, l'implémentation de l'arborescence utilise plus de 13 éléments DOM, y compris une <table> pour chaque élément individuel. L'utilisation de grands arbres (environ 10000 éléments) gèle simplement le navigateur. Un arbre pur JavaScript / HTML / CSS était capable de gérer facilement la même quantité d'éléments.
Développement
Le cycle de modification-essai de la source pure JavaScript / HTML / CSS ne peut pas être battu. Vous enregistrez simplement votre fichier source et actualisez la page dans le navigateur. C'est un facteur clé de la productivité et GWT ne peut tout simplement pas rivaliser même en utilisant un serveur de code.
Le débogage de JavaScript est absolument simple et agréable avec le débogueur de Chrome ou Firebug.
Experts Hammer
L'idée d'utiliser Java pour tout est pour les développeurs qui sont des "experts en marteau". Ils sont maîtres de leur marteau donc tout est un clou. Je pense que cette approche est très fausse. L'utilisation de GWT nécessite également une connaissance de CSS et HTML. Sans cela, les développeurs de GWT se heurtent souvent à des problèmes qu'ils trouvent presque impossible à résoudre, tandis qu'une personne ayant une expérience HTML / CSS peut trouver une solution. Si les développeurs ont besoin de cette compétence, ils peuvent obtenir plus facilement en développant en HTML.
Mon avis est que la plupart des avantages fournis par GWT sont au moins discutables tandis que les inconvénients sont beaucoup plus graves par rapport au développement en JavaScript / HTML / CSS pur.
la source
Ce n'est pas beaucoup mieux.
Pour un usage quotidien, pensez à jQuery , AmpleSDK ou à un polyfill html5 .
GWT a beaucoup de frais généraux: réels et conceptuels.
Cela pourrait être utile si vous avez une application java ou du code java côté serveur à porter sur une interface Web.
la source
Je pense à peu d'avantages de l'utilisation de GWT (plus de détails lire mon blog http://www.pandurangpatil.com/2012/09/benefits-of-using-gwt.html )
Comme l'application cliente GWT est écrite en Java, on a la possibilité de détecter des erreurs syntaxiques au moment de la compilation à cause de la même chose (bien qu'elle ne prenne pas en charge toutes les classes JRE car ces fonctionnalités ne sont pas prises en charge par les navigateurs eux-mêmes). Prenons un exemple pour comprendre ce que je dis. Si vous mal orthographiez un nom de variable JavaScript en utilisant une bibliothèque JavaScript pure. La seule façon de détecter une telle erreur est d'exécuter l'application et de tester les résultats souhaités. Les fonctionnalités Java comme les génériques et les annotations sont entièrement utilisées et peuvent être utilisées dans votre application.
On peut faire usage des bibliothèques disponibles existantes ou en écrire une pour générer du code selon les exigences avec facilité car le code qui doit être généré doit être en Java. Le compilateur GWT se charge de le compiler et de le convertir en JavaScript.
La gestion du code devient plus facile.
On peut simplement écrire une logique métier commune de telle manière qu'elle puisse être utilisée dans le code côté client GWT et également sur le code côté serveur comme en Java, par exemple la validation des données ou certaines fonctions utilitaires communes.
Avec l'utilisation du plug-in GWT eclipse, vous pouvez facilement déboguer le code client en Java pour votre logique métier.
Lorsque le compilateur GWT compile le code Java de votre client et en génère du JavaScript. Dont vous avez besoin de le déployer sur votre serveur, et il est servi et exécuté dans le navigateur de l'utilisateur à la demande. Lors de la génération de ce JavaScript, il effectuera quelques optimisations.
Il ne prend pas en compte le code mort lors de la génération de JavaScript, quand je dis code mort, je veux dire "code qui est là mais qui n'est pas appelé depuis le flux principal". À son tour, réduit la taille effective de votre code JavaScript final.
Il prend en charge l'obscurcissement du code JavaScript généré.
Il fait la minification du code JavaScript généré.
Et plus important encore, il générera séparément du code optimisé spécifique au navigateur. Quand je dis séparément, cela générera un JavaScript séparé spécifique au navigateur qui sera servi lorsque la demande respective sera reçue du navigateur donné. Ce qui à son tour réduit la taille du code JavaScript qui est téléchargé pour un navigateur spécifique car il ne contient pas toutes les manipulations spécifiques au navigateur dans un seul code.
Si vous rédigez votre candidature pour différentes langues, à savoir l'anglais, l'hindi, le marathi, etc. en utilisant la fonction d'internationalisation de GWT. Lors de la génération du code JavaScript, il crée une copie par combinaison de langue et de navigateur. Ce qui rend le code JavaScript généré pour une combinaison donnée de langue et de navigateur le plus optimal et le plus petit.
Dans le cas où vous devez utiliser du JavaScript direct qui peut être appelé à partir du code Java GWT, vous pouvez le faire en utilisant JSNI (JavaScript Native Interface). On peut même rappeler GWT Java Code depuis JavaSctipt.
Si vous souhaitez créer des pages capables de créer des signets, vous pouvez utiliser la fonction Historique de GWT.
Si vous souhaitez utiliser JSON comme format de données pour la communication et la manipulation, il a une très bonne fonctionnalité appelée JavaScript Overlay Types.
La fonction de liaison différée de GWT est une bonne fonctionnalité que je suppose qu'il est possible de fournir en raison de Java.
Vous pouvez créer votre interface utilisateur à l'aide des widgets disponibles de GWT dans le style Java Swing. Vous pouvez même créer vos widgets personnalisés très facilement.
Si vous souhaitez créer votre interface utilisateur (pages Web) dans un style html pur, vous pouvez utiliser la fonction d'interface déclarative de GWT. Je pense que c'est l'une des principales caractéristiques de GWT. Ce qui permet au développeur de créer plus facilement des pages dans un style HTML pur. Ce qui, je suppose, est plus facile à gérer que le codage de style Swing. Et surtout, vous pouvez toujours avoir votre logique en Java et seulement une partie de présentation en HTML pur. (Remarque: quelle que soit la méthode que vous utilisez (interface utilisateur déclarative ou style Swing), cela ne sera finalement que HTML, mais ce qui fait la différence, c'est la façon dont vous codez et maintenez-le).
La fonctionnalité Client Bundle de GWT facilite la gestion de vos autres ressources Web telles que CSS, images et autres contenus texte.
Widgets cellulaires: pour présenter la collecte de données paginées, GWT dispose de widgets cellulaires. Il existe des widgets comme CellTable, CellList, CellTree et CellBrowser.
Communication avec le serveur à partir du code client GWT. Il prend en charge plusieurs façons de mettre en œuvre la communication client-serveur.
Si vous n'êtes pas préoccupé par le protocole utilisé pour le transfert de données, il s'agit du mécanisme GWT RPC. Il est très facile d'intégrer votre code côté client pour le transfert de données avec le serveur. Vous pouvez définir des DTO personnalisés (objet de transfert de données) dans le code client qui peuvent même être utilisés sur le code côté serveur. L'implémentation côté serveur accepte les mêmes DTO en tant que paramètre ou valeur de retour. Tout le reste est pris en charge par le travail de trame GWT RPC. Il propage même les exceptions levées du code côté serveur à l'appelant dans le code côté client (à condition que vous deviez définir ces classes d'exception dans le package de code côté client. GWT RPC utilise en interne les appels AJAX avec leur propre protocole personnalisé pour le transfert de données.
Si vous ne souhaitez pas utiliser GWT RPC, vous pouvez effectuer des appels serveur AJAX pour récupérer les données du serveur à l'aide de Request Builder. Ce qui est également beaucoup plus facile à mettre en œuvre. Il a également une fonctionnalité intéressante Request Factory. Avec cette fonctionnalité, vous pouvez rendre votre couche DAO ou Service exposée pour être appelée à partir du code client. Pour ce faire, vous devez définir quelques ensembles d'interfaces pour votre service et les types de données personnalisés. Et en utilisant ces interfaces, vous pouvez accéder à ces services à partir du code client. J'ai écrit le plugin maven pour générer ces interfaces. Si vous annotez votre couche DAO avec certaines annotations requises, reportez-vous à ( https://github.com/pandurangpatil/gwt-mvn-helper) référez-y le module mvn-helper-test pour son utilisation. Request Factory est plus ciblé pour s'intégrer à la couche ORM comme JDO ou JPA sur le serveur. Il a un support pour appeler persist sur une entité donnée à partir du code client. Et le plus important lorsque vous appelez la méthode persist, il calcule et envoie uniquement les modifications (delta) au serveur pour les enregistrer.
Si vous souhaitez effectuer un appel JSONP interdomaine, vous pouvez faire la même chose.
la source