voila, j'ai un probleme pour concevoir mon architecture au niveau service:
g 2 couches de services:
- la 1ère que j'appele service métier, ne manipule que des objets métiers (BO). Elle fait appel à plusieurs DAO qui retourne aussi des BO. Comme on gère un modele objet riche, certaines relations sont donc mappée, ce qui donne un graph d'objet
EX:
Projet getProjetLotTache(Integer idProjet)
retourne
Projet
....+ List<Lot>
................+ List<Tache>
- ensuite g une couche qui va adapter les services métiers aux contraintes des clients: appliWeb, rmi, WebServices, ...
Cette couche manipule de BO mais retourne des ValueOject (VO)
La raison est que je souhaite masquer au client les objets du domaine métiers en cas de changement du modele, et je ne veux lui présenter uniquement l'information dont il a besoin (meme si je remonte un objet avec des champs qu'il ne voit pas)
Mais je souhaite aussi que ces VO offrent un modele objet riche, l'intelligence métier du BO en moins, donc cela donne également un graphe d'objet
ProjetVO
....+ List<LotVO>
................+ List<TacheVO>
J'utilise une Factory + un Adapter qui implemente plusieurs VO pour construire le VO voulu à partir d'un BO... En gros un Adapter va encapsuler un ou plusieurs BO + des infos à faire remonter. Ensuite la Factory retourne cet Adapter qui implémente l'interface du VO attendue.
[1] Déja, que pensez vous de cette approche et de l'architecture. Est ce que vous avez déja trouvé un inconvénient à remonter des BO à la couche présentation, ce qui simplifie nettement les choses?!
[2] Est ce qu'il ya mieux pour convertir BO --> VO
[3] Comment réaliser la conversion VO --> BO le plus simplement et le plus rapidement possible?
Au début je pensais propager les modifcation du VO au fur et à mesure sur les BO encapsulés au travers les setters du VO, mais cette solution ne marche pas lors de la destruction d'un VO ou seule la référence vers le BO est supprimée, mais le BO en lui meme car il est référencé ailleurs dans le graphe...
De plus, je souhaite utiliser la puissance de la dao qui s'appuie sur Hibernate et qui détecte automatiquement les changements faits sur le BO au moment de l'update! Donc ce serait stupide de faire 2 fois le travail à cause des VO.
j'attends vos remarques si c pas clair, merci d'avance
Partager