-
Hibernate façade !
Bonjour à Tous,
J'utilise dans mon projet hibernate avec les DAO, POJO..
Bon, à chaque table est associé un POJO / DAO
Parcontre, j'ai besoin dans plusieurs requettes d'acceder plusieurs tables à la fois. A chaque fois, Je me trouve contraint à ajouter une fonction au plus proche DAO. exemple :
J'ai 3 tables : Produit, Client et commandes.
Supposons que je veut lister les produits commandés par un client x.
Je vais donc ajouter une fonction de recherche. Je l'ajouterai dans le DAO Produit; or le produit est logiquement spécialisé dans l'accés à la table produit uniquement.
Je pense à ajouter une Classe exemple ProjetDAO, qui elle possède des reférences à tous les autres DAO. ainsi, je concentre mes accés via cette classe (bon qque chose de 'façade') dans laquelle je peus appeler les autres DAO ou definir d'autres fonctions comme celle évoquée.
Ma question :
Est ce cela engendrera des problèmes de performances?
Est ce que je vais instancier cette classe à chaque requette ?
Et si j'utilise Spring; est ce que cette classe peut être un sigleton ?
Merci d'avance.
-
OUi tu peux utiliser une faca injecté via spring en singleton. Cest ce qu'on a fait sur un projet j2ee pour une entreprise groupe & cela facilite beaucoup la lecture de tout en plus de créer une couche d'indépendance supplémentaire. L'un des intéret de la facade est de limiter les appels réseaux aussi.
Pour la performance, supposons que tu as une facade A avec 4 daos, spring peut utiliser une instanciation paresseuse il me semble cest a dire n'instancier tes daos internes que si nécessaire.
AU pire, tu peux le faire toit meme en faisant a chaque fois avant utilisation dans par exemple un getListeProduit(criteria c):
IF (xDao==null) daoX=newDao
-
Merci fredop,
Mon projet utilise (struts2 - Spring - Hibernate)
Ce que je veux exactement est que j'injecte pas autant de DAO dans mes actions struts2. parcontre je ne vais injecter que la façade ainsi j'ai toutes les fonctions d'accès aux données seront devant moi :
- les DAO via : ((ProjectHibernateFacade) projectInterfaceFacade).getXxxDAO().xxxMethodeDAcces();
- les fonctions d'accès utilisant des requettes complexes : projectInterfaceFacade.xxxMethodeDAcces();
donc façade qui contient les DAO (non pas et façade et DAO)
J'ai testé et ça marche bien pour (un seul utilisateur en localhost)
Le nombre des DAO est important (32).
le nombre des utilisateurs au même temps peut être important (100 .. 500).
Quelques méthodes lancent des requettes lourdes (en fait qques tables comptent environ 5 milles enregistrements)
La question (plus clairement) :
- est ce que le fait d'utiliser spring (d'ou les singletons) ne génere -t- il pas un goulot d'étranglement pour cette façade - qui est aussi singleton !- ?
- est il plus judicieux de déclarer cette façade un prototype ?
---
Une autre solution est d'utiliser les namedQuery mais le souci persistera -avoir +ieurs DAO dans l'action Struts2 - et aussi à chaque fois je suis contraint de me rappeler où est ce que j'ai définit la namedQuery.
Merci,