Différence entre Apache Tapestry et Apache Wicket
Guichet Apache ( http://wicket.apache.org/) et Apache Tapestry ( http://wicket.apache.org/) sont les deux framework web orienté composant s-contrairement aux frameworks basés sur l'action comme Stripes-par la Fondation Apache. Les deux vous permettent de construire votre application à partir de composants en Java. Ils me ressemblent tous les deux.
Quelles sont les différences entre ces deux cadres? Quelqu'un a une expérience à la fois? Plus précisément:
- Comment sont leurs performances, à quel point la gestion des états peut-elle être personnalisée, peuvent-elles être utilisées sans état?
- Quelle est la différence dans leur modèle de composant?
- que choisiriez-vous pour quelles applications?
- Comment s'intègrent-ils avec Guice, Spring, jsr 299?
Edit: j'ai lu la documentation pour tous les deux et j'ai utilisé les deux. Les questions ne peuvent pas être répondues suffisamment à la lecture de la documentation, mais de l'expérience de leur utilisation pendant un certain temps, par exemple comment utiliser Wicket dans un mode sans état pour les sites de haute performance. Grâce.
8 réponses
Quelques différences pertinentes telles que je les vois:
- Tapestry utilise une page semi-statique structure, où vous pouvez travailler avec conditions et boucles pour atteindre comportement dynamique. Wicket est complètement dynamique; vous pouvez charger composants dynamiquement, remplacez-les au moment de l'exécution, etc. Les conséquences de ce sont que la tapisserie est plus facile à optimiser, et ce guichet est plus souple dans son utilisation.
- les deux cadres sont à peu près aussi efficaces dans exécution, mais Wicket repose sur côté serveur de stockage (par défaut, le page actuelle de la session, et passée pages dans un "cache de deuxième niveau" qui est par défaut un fichier temporaire dans le fichier système). Si cela vous dérange, pensez combien de sessions simultanées vous vous attendez à avoir aux heures de pointe et calculer avec dire ~100kb par session (qui est probablement sur le côté élevé). Cela signifie que vous pouvez courir à peu près soutien 20 K sessions simultanées pour 2 GO. Dites 15k parce que vous en avez besoin mémoire pour d'autres choses aussi bien. De bien sûr, un inconvénient de stockage état c'est que ça ne marchera bien avec l'affinité de session, donc c'est un limitation lors de L'utilisation du guichet. Le cadre vous offre un moyen pour implémenter des pages sans état, mais si vous développez complètement apatride applications que vous pourriez envisager un cadre de référence différent.
- L'objectif de Wicket est de soutenir le typage statique dans toute la mesure, alors que Tapestry est plus sur l'enregistrement des lignes de code. Donc, avec Tapestry, votre base de code est probablement plus petite, ce qui est bon pour l'entretien, et avec Wicket, vous l'êtes beaucoup typé statiquement, ce qui facilite la navigation avec un IDE et la vérification avec un compilateur, ce qui est également bon pour la maintenance. Quelque chose à dire pour les deux imho.
J'ai lu quelques fois maintenant que les gens pensent que Wicket fonctionne beaucoup par héritage. Je tiens à souligner que vous avez le choix. Il y a une hiérarchie de composants, mais Wicket prend également en charge la composition par des constructions comme IBehavior (au-dessus desquelles, par exemple, le support Ajax de Wicket est construit). Sur le dessus de ce que vous avez des choses comme les convertisseurs et les validateurs, que vous ajoutez aux composants, globalement, ou même comme une préoccupation transversale en utilisant certains des écouteurs de phase Wicket fournit.
Révisé Après avoir étudié la tapisserie 5.
Le but de Wicket est une tentative de faire Développement Web similaire à l'interface graphique de bureau un. Ils ont réussi à le faire très bien au détriment de l'utilisation de la mémoire ( HTTPSession ).
L'objectif de Tapestry 5 est de rendre très optimisé (pour CPU et mémoire) framework web orienté composant.
Le piège vraiment grand pour moi était des réponses " wicket prend en charge le composant stateless!"aux arguments "Wicket a faim de mémoire". Bien que Wicket supporte en effet les composants sans état, ils ne sont pas "au centre du développement de Wicket". Par exemple, un bug dans StatelessForm n'a pas été corrigé pendant très longtemps - voir StatelessForm - problème avec les paramètres après la validation échoue.
- IMHO en utilisant Wicket est un peu eaiser jusqu'à ce que vous allez optimiser / affiner les paramètres de l'application web
- IMHO Wicket est plus difficile à étudier si vous avez programmé des applications web et que vous voulez penser en termes de traitement des demandes
- Tapestry 5 recharge automatiquement les classes de composants dès que vous les modifiez. Les deux frameworks rechargent le balisage des composants.
- Wicket forces balisage / séparation de code , Tapestry 5 juste vous donner cette capacité. Vous pouvez également utiliser une syntaxe moins détaillée dans Tapestry 5. Comme toujours cette liberté nécessite plus de précautions à prendre.
- le noyau de Wicket est plus facile à déboguer: les composants utilisateur sont basés sur l'héritage tandis que L'utilisateur Tapestry 5 les composants sont basés sur des annotations. De l'autre côté, cela pourrait faciliter les transitions vers les futures versions pour la tapisserie puis pour le guichet.
Malheureusement Tapestry 5 tutorial ne souligne pas que L'exemple de code Tapestry comme 't: loop source = "1..10"..."peut-être une mauvaise pratique. Donc, un certain effort devrait être mis en écriture des conventions D'utilisation de Tapestry / bonnes pratiques si votre équipe n'est pas très petite.
Mes recommandations:
- Utiliser Le Guichet lorsque la structure de vos pages est très dynamique et que vous pouvez vous permettre de dépenser 10 à 200 Kbs de mémoire HttpSession par utilisateur (ce sont des nombres approximatifs).
- utilisez Tapestry 5 dans les cas où vous avez besoin d'une utilisation plus efficace des ressources
Voici une comparaison assez approfondie des travaux de développement D'IBM.
Http://www.ibm.com/developerworks/java/library/os-tapestrywicket/index.html?ca=drs
Update: le lien est mort, mais vous pouvez trouver la page sur http://web.archive.org/web/20131011174338/http://www.ibm.com/developerworks/java/library/os-tapestrywicket/index.html?ca=drs
Je pense que Wicket est un cadre plus simple à utiliser.
En outre, Wicket permet le rechargement de classe via le système de remplacement de code à chaud de votre IDE. C'est tout ce qui est nécessaire pour que Wicket exécute les versions modifiées des classes d'une application en cours d'exécution. Les restrictions habituelles s'appliquent pour Hot-code replace, telles que le fait de devoir s'exécuter en mode débogage (Eclipse) et de ne pas pouvoir modifier les aspects structurels d'une classe (nom de classe, modification des signatures de méthode, etc...).
Je n'aime pas le modèle de programmation Tapestry et je sais que de nombreux développeurs quittent Tapestry à cause de trop de changements et d'incompatibilités dans le développement. Voir: http://ptrthomas.wordpress.com/2009/09/14/perfbench-update-tapestry-5-and-grails/
Wicket est un très bon framework web. Le meilleur de tous ce que je sais. Je l'utilise depuis la version 1.3 et j'obtiens toujours ce que je veux. Wicket a une excellente intégration avec Spring-il suffit d'utiliser l'annotation @SpringBean dans votre code pour injecter n'importe quel bean spring à vos classes.
Essayez http://incubator.apache.org/click / . C'est un framework Web java incroyable. Certains l'appellent "le Guichet fait droit" ;-)
Comme je l'ai dit quand 4.1 était la version stable officielle:
Vous devriez jeter un très bon coup d'œil à L'histoire du développement de Tapestry avant de vous engager à l'utiliser. Tapestry a fait beaucoup de mises à niveau non compatibles, sans la poursuite du support des anciennes versions. Les correctifs à 4.1 ne sont plus traités dans un délai raisonnable. C'est à mon point de vue inacceptable pour la version stable officielle.
S'engager à utiliser Tapestry 5 signifie:
Vous devriez devenir un committer; vous devez suivre tous les nouveaux développements, abandonner les anciennes versions aussi vite que possible; maintenez vous-même des versions stables.