IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Persistance des données Java Discussion :

Pattern MVC, partie Model et DAO


Sujet :

Persistance des données Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut Pattern MVC, partie Model et DAO
    Bonjour a tous,

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

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

    Je connais bien le pattern MVC, mais néanmoins j'ai quelque petits problèmes avec l'architecture de mon application, notamment avec la partie model (donc indépendant du framework pour le moment).

    Je souhaiterais dans un premier temps faire une connexion a une base de données 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 problème 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 accéder 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 dépendances entre eux (un User possède une dépendance sur les Forum qu'il a créé) faut il que je charge tous les forums de l'utilisateur en même 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 mémoire 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 d’être plus claire.

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

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu soulèves un problème plutôt récurrent lié à la profondeur des informations encapsulées dans une entité (au sens entity jpa).
    En fonction de l'endroit d'où tu regardes, tu n'auras pas forcément besoin de toutes les informations.
    Avec un système comme hibernate ou jpa, tu as la possibilité de déclarer un chargement tardif (lazy loading), ce qui permet de ne pas charger forcément tout le graphe d'objets, l'inconvénient vient lorsqu'on utilise les ejb et JTA (en standard). Dès qu'on sort du conteneur, les objets sont dit "détachés", 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'entités commun.
    Les DTO sont très décriés, personnellement, dans la configuration où on est (EJB, base de données AS400 qui date, ...), on l'utilise tout le temps (ou presque)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Bonjour OButterlin,

    et merci de m'avoir répondu. 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 requêtes. Mais le problème sera la multitude de DTOs à créer en fonction des types de requêtes que l'on souhaite faire.

    Pour être précis 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 possède une collection de ses forums, et que forum possède une collection de ses talks. Si je n'utilise pas les DTOs, je risque très vite de charger beaucoup de données 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 données . Donc les DTOs seront ici un point fort puisque je devrais en définir 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 propriétaire des talks). De plus l’indépendance entre les couches est respectée.

    Mais ce qui n'est pas apprécié avec les DTOs, ce sont les redondances de codes (car je vais surement avoir besoin de réécrire 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 appréciés, alors quels sont les autre méthodes que l'on peut utiliser pour respecter une indépendance entre les couches ? (et sans avoir besoin de charger toute la base de données si je veux juste lister les utilisateurs ?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Oui, ce que tu dis est correct.
    Mais le problème, c'est que ça devrait être la vue qui détermine les données à fournir, pas l'inverse.
    Donc, en partant de la vue, tu construis le modèle objets (DTO) et tu récupère les données via une méthode spécifique dans ce qui deviendra plus tard une facade (en EJB).
    Dans cette méthode, tu fais ce que tu veux, pour le moment en jdbc de 1 à n requêtes en fonction des besoins, plus tard via hibernate ou jpa en utilisant les relations one-to-many ou many-to-many en lazy loading.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question concernant le pattern MVC et DAO
    Par foufar2009 dans le forum Java EE
    Réponses: 4
    Dernier message: 29/10/2010, 14h51
  2. Pattern MVC en lien avec un pattern DAO ?
    Par Mikya1104 dans le forum JDBC
    Réponses: 0
    Dernier message: 16/09/2009, 13h26
  3. Réponses: 4
    Dernier message: 24/02/2009, 13h06
  4. Pattern MVC et barre de progression
    Par Tiberizz dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 05/12/2006, 19h44
  5. [Design Pattern]Respecter le modèle MVC
    Par etiennegaloup dans le forum Général Java
    Réponses: 2
    Dernier message: 16/10/2005, 13h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo