Je suis nouveau sur StackExchange, mais je pensais que vous seriez en mesure de m'aider.
Nous créons une nouvelle application Java Enterprise, remplaçant une ancienne solution JSP. En raison de nombreux changements, l'interface utilisateur et certaines parties de la logique métier seront complètement repensées et réimplémentées.
Notre première pensée a été JSF, car c'est la norme en Java EE. Au début, j'ai eu une bonne impression. Mais maintenant, j'essaie d'implémenter un prototype fonctionnel, et j'ai de sérieuses préoccupations à propos de En l'utilisant.
Tout d'abord, cela crée le pire mélange pseudo-HTML/CSS/JS invalide le plus encombré que j'ai jamais vu. Il viole toutes les règles que j'ai apprises en développement Web. De plus, il jette ensemble ce qui ne devrait jamais être aussi étroitement couplé: la mise en page, la conception, la logique et la communication avec le serveur. Je ne vois pas comment je pourrais étendre cette sortie confortablement, que ce soit avec du style CSS, en ajoutant des bonbons d'interface utilisateur (comme des raccourcis clavier configurables, des widgets de glisser-déposer) ou quoi que ce soit.
Deuxièmement, c'est beaucoup trop compliqué. Sa complexité est exceptionnelle. Si vous me demandez, c'est une mauvaise abstraction des technologies Web de base, paralysées et inutiles à la fin. Quels avantages ai-je? Aucun, si vous y pensez. Des centaines de composants? Je vois en outre des dizaines de milliers d'extraits HTML/CSS, des dizaines de milliers d'extraits JavaScript et des milliers de plug-ins jQuery. Cela résout vraiment beaucoup de problèmes - nous n'aurions pas si nous n'utilisions pas JSF. Ou le modèle de contrôleur frontal du tout.
Et enfin, je pense que nous devrons recommencer dans, disons 2 ans. Je ne vois pas comment je peux implémenter l'ensemble de notre première maquette graphique (en outre, nous n'avons pas d'expert JSF dans notre équipe). Nous pourrions peut-être le pirater ensemble d'une manière ou d'une autre. Et puis il y en aura plus. Je suis sûr que nous pourrions pirater notre hack. Mais à un moment donné, nous serons coincés. En raison de tout ce qui précède, le niveau de service est sous le contrôle de JSF. Et nous devrons recommencer.
Ma suggestion serait d'implémenter une API REST, en utilisant JAX-RS. Ensuite, créez un client HTML5/Javascript avec MVC côté client (ou une certaine saveur de MVC ..) Soit dit en passant, nous aura besoin de l'API REST de toute façon, car nous développons également un frontal partiel Android).
Je doute que JSF soit la meilleure solution de nos jours. Comme Internet évolue, je ne vois vraiment pas pourquoi nous devrions utiliser ce "râteau".
Maintenant, quels sont les avantages/inconvénients? Comment puis-je souligner mon point de ne pas utiliser JSF? Quels sont les points forts pour utiliser JSF par rapport à ma suggestion?
Il y a au moins une très bonne raison d'envisager JSF.
C'est une partie standard de la pile Java EE, et sera donc disponible - et en fonctionnement - dans TOUS Java EE pendant très, très longtemps. Et maintenu aussi, sans que vous ayez à le faire si vous avez strictement respecté la spécification Java EE.
Si cela vous inquiète, vous devriez le considérer. La plupart des logiciels vivent plus longtemps que leurs concepteurs ne le pensent, surtout s'ils sont pris en considération lors de leur écriture.
Maintenant, quels sont les avantages/inconvénients? Comment puis-je souligner mon point de ne pas utiliser JSF? Quels sont les points forts pour utiliser JSF par rapport à ma suggestion?
Vous semblez déjà avoir fait votre opinion sur les inconvénients, et je dois faire un gree avec certains d'entre eux (il ne sépare pas suffisamment la mise en page et la logique, et le HTML résultant est souvent atroce), mais en désaccord sur les autres (si vous utilisez Facelets, que je recommanderais vivement, alors la sortie devrait certainement être valide).
Voici donc quelques avantages:
Mais certainement aucun de ces avantages n'est si important que vous devriez utiliser JSF sur un autre framework avec lequel votre équipe a déjà de l'expérience.
JSF est un framework Web avec état adéquat pour Java qui est une norme qui signifie qu'il est pris en charge par de nombreux fournisseurs majeurs (y compris les logiciels libres). Il a un support de bibliothèque tiers puissant (PrimeFaces, IceFaces etc.) Cependant, il "brise le Web" fondamentalement en raison de sa nature dynamique (et un tas d'autres choses). Voir Comparaison de Matt Raible des cadres Web basés sur JVM , JSF arrive généralement près du dernier .
Modifier - avec JSF 2.2 - vous pouvez commencer à affirmer qu'il ne brise pas le Web autant qu'il l'a fait une fois. En fait, son intégration HTML5 n'est pas terrible :-).
Nous avions une ancienne application JSP/Struts 1.0. Nous avons ignoré Struts 2, JSF et tout ce qui s'est passé depuis Struts 1 et sommes passés à Spring 3.0. Il a un support (et une communauté active) pour notre liste de souhaits - Eclipse IDE, MVC et REST. De plus, nous avons abandonné notre Javascript/ajax vintage maison pour jquery.
YMMV mais Spring a été une migration en douceur pour nous.