J'ai beaucoup lu sur les points positifs de Apache Wicket , mais il est difficile de trouver les points négatifs. Étant donné qu’aucun cadre n’est toujours la solution adaptée à chaque problème, quels sont les inconvénients de Wicket et dans quels types de projets vous ne l’utilisez pas?
Peut-être pas une question populaire, mais une question importante je pense.
Wicket exige des pratiques de codage assez solides. Par exemple, si vous stockez un modèle d'image dans votre composant, mais ne l'utilisez pas en tant que modèle du composant, il ne se détachera pas automatiquement et pourrait faire exploser la taille de votre session. Ce type de gestion n’est pas une chose à laquelle la plupart des utilisateurs de Java sont habitués.
Le guichet est actif et fréquemment mis à jour. C’est bien, mais chaque fois que je mets à jour une nouvelle version, je me rends compte que j’ai besoin de beaucoup de refactoring pour passer à de meilleures pratiques de codage (1.4 génériques introduits, 1.4.x introduits sur onConfigure (), 1.5 ayant des stratégies de ressources différentes ). Encore une fois, toutes sont de bonnes mises à jour et vous poussent vers un meilleur code, mais j'envie les gens qui viennent à Wicket MAINTENANT au lieu de deux ans auparavant :)
En combinant les deux éléments ci-dessus, je pense que Wicket assume de véritables compétences en programmation une fois que vous avez dépassé les fonctionnalités de base. Si vous êtes un bon développeur, vous allez adorer ce que Wicket peut faire pour vous (et le code est assez bien documenté dans JavaDoc). Si vous êtes débutant, vous pourriez être frustré à mesure que vous approfondissez.
De plus, bien que cela "fonctionne" sur Google App Engine, j'ai découvert plusieurs problèmes qui l'empêchaient de fonctionner confortablement dans cet environnement. C'est pour une discussion différente.
Mon déni de responsabilité est que je n'ai utilisé rien d'autre, alors peut-être que d'autres cadres sont pires.
Dans le monde réel, la vitesse de développement est très lente avec Wicket. Si vous ne possédez pas de composant prédéfini à utiliser comme un ouvrier d'usine sur une chaîne d'assemblage, la productivité s'arrête jusqu'à ce que vous puissiez créer un nouveau panneau. La complexité du code augmente et il est difficile de lire le code car vous doublez effectivement les lignes de code que vous devez écrire. Vous cherchez constamment à faire des choses triviales sur Internet et dans des livres. Par exemple, un simple bouton de réinitialisation correspond à une ligne de code HTML, mais dans Wicket, il est nécessaire de rechercher dans Google comment procéder. Cela rend les choses simples difficiles et les choses difficiles impossibles.
Je n'ai pas encore vu d'interface utilisateur vraiment compliquée construite avec Wicket. Wicket ne permet que des interfaces utilisateur simples composées de composants prédéfinis. Toutes les interfaces utilisateur construites avec Wicket auraient pu disposer d'une base de code plus propre si cela n'avait pas été fait dans Wicket et si l'échelle aurait été améliorée en supprimant Wicket. Wicket ne vous achète rien en tant que widgets Nice UI. Même les implémentations de Wicket par jQuery UI sont inférieures à l’utilisation directe de jQuery UI.
Après avoir lu des dizaines de milliers de lignes de code Wicket dans mon travail, je peux dire que le code Wicket est fondamentalement un code spaghetti. Si vous aimez ulgy, inelegant, verbose, du code avec des génériques et des classes internes anonymes un peu partout, Wicket est ce que vous préférez. La quantité de bruit de ligne est très élevée. La base de code devient moins gérable pour cette raison. Cela est particulièrement vrai si vous utilisez l'implémentation Wicket AJAX défectueuse.
Plusieurs réponses déclarent que le guichet est incapable de créer dynamiquement une arborescence de composants . Sérieusement, je pense que vous travaillez avec un guichet différent ici;)
Tout d'abord: Wicket est basé sur des composants et non sur un générateur HTML aléatoire.
Il est en fait très facile d'obtenir un arbre de composants dynamiques:
Voulez-vous remplacer un composant par un autre? Utilisez Component.replaceWith (Component) (très utile en conjonction avec un MarkupContainer vide)
Besoin d'une liste de panneaux changeant dynamiquement? Mettez-les dans un répéteur.
Faire disparaître un composant? Utiliser Componente.setVisible ()
Et beaucoup plus de façons de le faire.
Alors, ceux qui pensent que vous ne pouvez pas créer d’arborescence de composants dynamiques, donnez quelques exemples et je suis heureux d’en discuter.
(Si vous avez vraiment besoin d'être encore plus flexible, vous pouvez créer un balisage de charge Wicket à partir de différentes sources. Ce que je n'ai JAMAIS fait pour construire des arbres dynamiques, mais pour pouvoir récupérer le balisage à partir d'une base de données ou d'un réseau)
Je trouve le guichet vraiment utile, mais ce sont les inconvénients que j'ai trouvés jusqu'à présent:
Voir ma réponse ici:
Certes, je les ai énumérés comme des avantages, mais il est facile de comprendre pourquoi quelqu'un ressentirait le contraire.
Bien qu'il n'y ait rien que vous ne puissiez absolument pas faire dans Wicket, il y a certains concepts sous-jacents (je n'appellerais pas cela une philosophie parce que je déteste l'abus de cette Parole) que vous devriez suivre. Plus vous vous écartez de ce concept, plus il devient difficile de l'intégrer à Wicket.
Mon principal problème avec Apache Wicket est le manque de matériel de référence en ligne de qualité. J'ai effectué des recherches approfondies sur Google pour trouver des exemples d'éléments simples, tels que les boîtes de sélection, et j'ai eu beaucoup de difficulté à trouver quelque chose qui puisse m'aider non seulement à faire fonctionner une boîte de sélection, mais à comprendre pourquoi je le fais de cette façon. De plus, là-bas, j'ai beaucoup cherché et je n'ai pas trouvé un bon aperçu de base des concepts clés de la construction d'une application Wicket.
De nos jours, je ne devrais pas avoir à acheter un livre pour apprendre un cadre de programmation Web. Quelques recherches sur Google ont permis de répondre à toutes les autres questions que je me posais en matière de programmation Web. En revanche, il y a encore des parties de Wicket que je ne comprends pas car je n’ai trouvé aucune documentation décente, et poser des questions sur les forums est limité car je n’ai pas ce que j’estime être une solide compréhension de Wicket après avoir lu uniquement en ligne. Documentation.
Je n'ai pas utilisé Wicket, alors allez-y, votez pour le bas si vous devez, mais Wicket est basé sur des composants. Si vous préférez une solution à base de composants, cela ne sera pas un inconvénient pour vous, mais j'ai trouvé un cadre concurrentiel basé sur des composants.
Venant de quelques années de JSF (également un modèle à base de composants) à Spring MVC (plus basé sur l’action), j’ai eu le sentiment que les chaînes avaient été levées. Le troisième point de la réponse de mgv, "Vous ne pouvez pas définir de manière dynamique les arborescences de composants, vous devez les définir à la fois dans la présentation HTML et dans le code Java" résume en grande partie la cause de ma frustration.
Il y a deux choses que j'ai trouvées agaçantes avec Wicket:
Les appels Ajax sont effectués de manière synchrone (ils sont mis en file d'attente côté client pour éviter les problèmes de simultanéité), donc Ajax n'est que JAX, en fait. EDIT: apparemment, je me suis trompé à ce sujet, voir le commentaire de marting-g ci-dessous.
L'API ne semble pas se soucier beaucoup de l'encapsulation, vous trouverez donc lots des méthodes publiques documentées sous la forme "Cela ne fait pas partie de l'API publique. N'appelez pas cette méthode." (ou quelque chose de similaire).