Bonjour tout le monde,
actuellement j'ai dans l'idée de développer une surcouche à JSF 2 pour avoir une base solide lors de mes développements web. Afin d’avoir le développement le plus propre et aboutie, j’aurais besoin de vos conseils avisés et argumentés.
L'objectif de mon projet est de facilité le développement des couches graphiques et sécurités d'un site utilisant JSF2. Pour cela, je créé des widgets réutilisables. Afin d'arriver à cet objectif, j’ai suivi la logique suivante :
- Utilisation du modèle MVC2
- Utilisation du templating
- Utilisation de la fonction composition pour la création de widgets
J’ai également utilisais les librairies suivantes :
- Mojarra pour JSF 2
- Primefaces pour un complément de taglibs
Voici un aperçut de mon architecture coté JSP :
- Dans ressources : un répertoire contient l’ensemble des widgets
- Dans templates : l’ensemble des templates existants
- Dans le répertoire source des JSP : l’ensemble des pages standards
Et côté code:
- Un package Bean permettant de créer l’ensemble des beans
- Un package Widget contenant l’ensemble des classes liées aux widgets
Je détails un peu côté les deux packages :
- Le package Bean contient une unique entrée qui permet de construire et initialiser le bean en fonction de la page courante. Voici un schéma qui permet de comprendre le Mécanisme.
Bean -> Builder -> View -> Bean -> Factory -> Bean
Le Bean appel le builder qui sélectionne la vue à créer puis la retourne au bean.
Le bean appel la factorie qui construis la vue soit en lazy loading soit en full loading.
Note : La vue contient l’ensemble des widgets et données utilisées par une page, donc chaque page à ça propre vue.
- Le package widget contient une unique entrée également qui permet de géré l’ensemble des actions de la vue et les updates à faire sur l’ensemble des widgets de la vue. Voici plusieurs schémas qui permettent de comprendre comment fonctionne le package.
Création des widgets de la vue :
View (PackageBean) –créer-> Mediator -> View –créer-> Widgets –> View
Utilisation d’une action d’un widget:
View -lanceActionWidget-> Widget-Update->Mediator->Update tous les widgets selon besoin
Note: Chaque vue à son propre mediator.
Selon moi, l’avantage est d’avoir à écrire uniquement deux classes (Mediator et View) pour chaque nouvelle page et que l’on peut réutiliser les widgets pour toute nouvelle page. Cependant, j’aimerais qu’une vue ne nécessite l’écriture que d’une seule et unique classe sans pour autant que cette classe soit massive. Mais je ne vois pas comment faire.
J'ai déjà mis en forme le code et le graph UML
Je précise également que si certains sont intéresses je peux volontiers donner plus de détails.
Partager