# Java > Gnral Java > Persistance des donnes >  Pattern MVC, partie Model et DAO

## gwadaboug

Bonjour a tous,

Je suis actuellement en train de me former sur les technologies JAVA/J2EE, et plus particulirement pour les applications WEB.

Je cr un petit projet (un simple forum) afin de pouvoir mettre en place diffrents frameworks tel que spring, hibernate, struts, ...

Je connais bien le pattern MVC, mais nanmoins j'ai quelque petits problmes avec l'architecture de mon application, notamment avec la partie model (donc indpendant du framework pour le moment).

Je souhaiterais dans un premier temps faire une connexion a une base de donnes via JDBC, ensuite la transformer en Hibernate, ensuite en EJB. Donc je pense utiliser soit le pattern factory, ou IOC (via Spring).

Jusqu'ici tout va bien. Le problme est que je ne sais pas comment faire une architecture qui sera PROPRE pour la partie model.
C'est a dire que je vais pouvoir accder a mes DAO via des classes services, qui vont me retourner des objets beans (UserServices appelle UserDAO qui retourne UserBean). Sauf que ces objets ont des dpendances entre eux (un User possde une dpendance sur les Forum qu'il a cr) faut il que je charge tous les forums de l'utilisateur en mme temps ? ( imaginons qu'un utilisateur ait cr un grand nombre de forum, et que je n'ai besoin seulement que de connaitre une information sur l'utilisateur, je vais donc charger la mmoire inutilement)

Je souhaiterais savoir si quelqu'un avait un ou plusieurs exemple de projet avec des sources, avec une bonne architecture, sur lesquels je pourrais m'appuyer ?

Si certaine partie de mon message ne sont pas claire, dites le moi, je reviendrais avec un diagramme de classe pour tenter dtre plus claire.

Je vous remercie d'avance pour l'aide que vous pourriez m'apporter  ::ccool::

----------


## OButterlin

Tu soulves un problme plutt rcurrent li  la profondeur des informations encapsules dans une entit (au sens entity jpa).
En fonction de l'endroit d'o tu regardes, tu n'auras pas forcment besoin de toutes les informations.
Avec un systme comme hibernate ou jpa, tu as la possibilit de dclarer un chargement tardif (lazy loading), ce qui permet de ne pas charger forcment tout le graphe d'objets, l'inconvnient vient lorsqu'on utilise les ejb et JTA (en standard). Ds qu'on sort du conteneur, les objets sont dit "dtachs", plus moyen de faire du chargement tardif.
Une technique consiste  utiliser des DTO (Data Transfert Object), du coup, tu utiliseras un graphe de DTO correspondant exactement aux besoins d'une vue tout en utilisant un graphe d'entits commun.
Les DTO sont trs dcris, personnellement, dans la configuration o on est (EJB, base de donnes AS400 qui date, ...), on l'utilise tout le temps (ou presque)

----------


## gwadaboug

Bonjour OButterlin,

et merci de m'avoir rpondu. J'ai effectu pas mal de recherche sur les DTOs pour en comprendre le fonctionnement.

Pour faire simple, ils permettent de personnaliser les objets et ainsi limiter le nombre de requtes. Mais le problme sera la multitude de DTOs  crer en fonction des types de requtes que l'on souhaite faire.

Pour tre prcis je vais donner un exemple dans mon cas (le projet forum):
J'ai 3 tables 
User (id, login, password) //Utilisateur du forum
Forum (id, #User, titre, message) //Forum ouvert par un utilisateur
Talk (id, #Forum, #User, message) //Discution a un forum par un utilisateur

Si je cr les objets de cette table (Javabean) en admettant que user possde une collection de ses forums, et que forum possde une collection de ses talks. Si je n'utilise pas les DTOs, je risque trs vite de charger beaucoup de donnes lorsque je vais vouloir juste rechercher des informations sur un utilisateur. (sans lazy loading pour le moment je travail juste en JDBC)

Exemple je veux juste la liste des utilisateurs, en gros je charge toutes la base de donnes  ::calim2:: . Donc les DTOs seront ici un point fort puisque je devrais en dfinir un juste pour ne recevoir que l'id, le login et le mot de passe et pas la collection de ses forums (qui aurait inclus la liste des talks du forum et galement chaque propritaire des talks). De plus lindpendance entre les couches est respecte.

Mais ce qui n'est pas apprci avec les DTOs, ce sont les redondances de codes (car je vais surement avoir besoin de rcrire des paragraphes entier de codes qui se ressemble).
Mais sur le site de Sun, avec l'utilisation des DAOs, ils utilisent les DTOs si j'ai bien compris (lien).

Donc je voulais savoir si tout ce que je viens de dire au dessus est juste ?
Et si les DTOs ne sont pas apprcis, alors quels sont les autre mthodes que l'on peut utiliser pour respecter une indpendance entre les couches ? (et sans avoir besoin de charger toute la base de donnes si je veux juste lister les utilisateurs  ::mrgreen::  ?

----------


## OButterlin

Oui, ce que tu dis est correct.
Mais le problme, c'est que a devrait tre la vue qui dtermine les donnes  fournir, pas l'inverse.
Donc, en partant de la vue, tu construis le modle objets (DTO) et tu rcupre les donnes via une mthode spcifique dans ce qui deviendra plus tard une facade (en EJB).
Dans cette mthode, tu fais ce que tu veux, pour le moment en jdbc de 1  n requtes en fonction des besoins, plus tard via hibernate ou jpa en utilisant les relations one-to-many ou many-to-many en lazy loading.

----------

