-
Question de conception
Bonjour,
j'ai une façon de faire mon programme dont j'aimerai avoir votre opinion, car mon expérience ne me permet pas encore de s'avoir si je cours vers l'eccueil.
L'utilise les EJB session stateless uniquement comme des tuyaux pour mettre en relation la couche présentation avec des couches de données ou business.
(je fais du E commerce).
Par exemple j'ai un I18nManager maison qui me renvoit les traductions pour des labels. Dans un programme stand alone j'appel ainsi:
String traduction=I18nManager.getInstance().getTraduction(clé,Locale);
le manager est un singleton. A l'initialisation, il charge les traductions depuis les xml. (je vous passe les détails de pourquoi j'utilise pas le 18n de java)
PS: je ne met pas le code I18n dans celui du WAR, car c'est carrément un programme qui permet à des traducteurs de venir le modifié, non c'est conceptuellement un service.
Pour y accéder coté IHM, je passe par l'EJB, j'ai un I18nBean qui me fournit l'instance du singleton.
Et coté War j'ai un War18n encore un singleton, donc la seule fonction est de trouver l'ejb et de récupérer l'instance du 18nManager. Mon idée est bien sur d'éviter les appels jndi.
Donc pour résumer j'ai:
JSP --> WarI18nManager --> EJB --> I18nManager;
Donc je n'utilise, si je ne me trompe, l'EJB que comme une classe spécialisé dans la communication RMI. Je cherche evidemment à prévoir le changement, notamment les web services et autres.
Rem: je fais ca aussi pour les couches métiers et données (base de données)
Qu'en pensez vous ?
-
Rien à dire sur le modèle MVC, puisque les couches ont l'air bien respectées.
Pour optimiser le code dans le cas spécifique de l'i18n, il serait intéressant de cacher tes traductions dans la partie WEB (présentation )pour éviter des allers-retours incessants entre le WEB et l'EJB à chaque JSP. Il existent des caches (OSCache par ex.) qui gèrent les data avec des timeout,etc... pour pouvoir recharger des data à la volée, ou bien via des MBeans.
Normalement, tous les frameworks (Struts, JSF par exemple) gèrent l'I18N et cachent les textes traduits en interne.