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

Design Patterns Discussion :

[DAO] Quel code dans les objets métier ?


Sujet :

Design Patterns

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut [DAO] Quel code dans les objets métier ?
    Bonjour,

    j'ai une question bête sur le pattern Data Access Objects, j'ai bien compris le principe, je sais ce qu'on doit mettre dans les objets DAO. Par contre je ne sais pas comment faire appel à ces objets depuis les objets métier, quel est le code à utiliser ? Par exemple dans MonObjet.créer(), dois-je instancier un MonObjetDAO puis lancer MonObjetDAO.insert() puis détruire l'instance de MonObjetDAO par exemple ?

  2. #2
    Membre confirmé
    Femme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2009
    Messages : 236
    Points : 491
    Points
    491
    Par défaut
    bonjour,
    Pour autant que je comprenne ta question, oui tu instancie ton DAO dans ta classe metier . Pour faire simple chaque couche interagit uniquement avec ses couches adjacentes: DB <-> DAO<->Classe metier<->Autres couches

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    D'accord merci j'ai trouvé des exemples de code mais ça ne présente que le code des classes DAO donc j'étais pas sûr. Merci à toi =)

  4. #4
    Membre averti Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Points : 410
    Points
    410
    Par défaut
    Bonjour,

    Perso, je te conseille d'intégrer une couche Factory : ça complexifie l'interaction car tu dois découpler tes DAO en Contrat/Servant mais ça te permet d'intégrer facilement des systèmes de cache, de mesure de perfs et tout ce à quoi je ne pense pas entre ta couche métier et ton data access.

    @+
    Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Je suis déjà entrain d'intégrer une couche factory pour rendre mon code indépendant du SGBD. Par contre je n'ai pas compris ce que signifie "Contrat/Servant" tu peux m'expliquer ?

  6. #6
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Citation Envoyé par Gaetch Voir le message
    Par exemple dans MonObjet.créer(), dois-je instancier un MonObjetDAO puis lancer MonObjetDAO.insert()
    J'aurais tendance à dire qu'un objet métier ne devrait pas explicitement déclencher sa persistance lui-même. Ce n'est pas de sa responsabilité. En général, ce sont d'autres objets qui le font, des objets qui connaissent le contexte d'exécution de l'application et savent si c'est le bon moment pour persister.
    Il faut bien distinguer l'instanciation d'un objet de sa persistance. On peut vouloir créer sans pour autant persister.

    DAO est issu des core patterns J2EE, jette un oeil ici, il y a tout ce qu'il faut comme exemples de DAO + DAOFactory.

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par Luckyluke34 Voir le message
    J'aurais tendance à dire qu'un objet métier ne devrait pas explicitement déclencher sa persistance lui-même. Ce n'est pas de sa responsabilité. En général, ce sont d'autres objets qui le font, des objets qui connaissent le contexte d'exécution de l'application et savent si c'est le bon moment pour persister.
    Il faut bien distinguer l'instanciation d'un objet de sa persistance. On peut vouloir créer sans pour autant persister.

    DAO est issu des core patterns J2EE, jette un oeil ici, il y a tout ce qu'il faut comme exemples de DAO + DAOFactory.
    Bin justement, sur le premier schéma (j'ai pas encore tout lu) on voit bien que c'est le BusinessObject qui crée l'objet DAO :

  8. #8
    Membre averti Avatar de Mandraxx
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2011
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 182
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par Gaetch Voir le message
    Je suis déjà entrain d'intégrer une couche factory pour rendre mon code indépendant du SGBD. Par contre je n'ai pas compris ce que signifie "Contrat/Servant" tu peux m'expliquer ?
    Bonjour,

    J'ai répondu sans jeter un oeil dans la bible des DP donc mon vocabulaire est peut-être un peu has been

    Quand tu fais une Factory, tu as un contrat qui est connu de ta couche métier (interface ou classe virtuelle pure, ça dépend des langages) et un servant qui est complètement masqué (objet concret) dont la classe hérite ou implante le contrat.

    Par suite, ta classe Factory propose des méthodes dont les signatures retournent le type statique contrat et dont le corps instancient des objets dont le type dynamique est l'objet servant (concret donc, le "vrai" DAO).

    L'appelant métier déclenche donc les traitements du DAO par polymorphisme : ce mécanisme très puissant te permet de modifier le comportement des DAO par adjonction d'une couche supplémentaire si besoin (grâce au pattern Proxy) ou bien de modifier l'implantation des DAO par paramétrage de la Factory. C'est très utile par exemple si tu veux supporter deux types de persistance (SGBD et NoSQL par exemple...).

    En espérant avoir été plus clair .

    @+
    Le choix motivé par le seul argument de modernité est intrinsèquement dépourvu de créativité.

  9. #9
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Citation Envoyé par Gaetch Voir le message
    Bin justement, sur le premier schéma (j'ai pas encore tout lu) on voit bien que c'est le BusinessObject qui crée l'objet DAO :
    Pas lu dans le détail, mais je serais tenté de dire que ce business objet est plutôt ce que l'on a coutume d'appeler aujourd'hui un service.

    Un service accède à une entité persisté (Entity) au travers d'un DAO.

  10. #10
    Membre émérite
    Inscrit en
    Janvier 2011
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Janvier 2011
    Messages : 805
    Points : 2 918
    Points
    2 918
    Par défaut
    Citation Envoyé par Tommy31 Voir le message
    Citation Envoyé par Gaetch Voir le message
    Bin justement, sur le premier schéma (j'ai pas encore tout lu) on voit bien que c'est le BusinessObject qui crée l'objet DAO :
    Pas lu dans le détail, mais je serais tenté de dire que ce business objet est plutôt ce que l'on a coutume d'appeler aujourd'hui un service.

    Un service accède à une entité persisté (Entity) au travers d'un DAO.
    En effet, c'est assez trompeur, BusinessObject dans le schéma ne représente pas l'objet métier persisté par le DAO mais le code client utilisateur du DAO.

    "The BusinessObject represents the data client. It is the object that requires access to the data source to obtain and store data. A BusinessObject may be implemented as a session bean, entity bean, or some other Java object, in addition to a servlet or helper bean that accesses the data source."

    Donc ça peut être un service mais aussi à peu près n'importe quoi d'autre. On a un exemple avec le code 9.6 dans le lien.

  11. #11
    Membre habitué
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Points : 130
    Points
    130
    Par défaut
    Bon j'ai pas compris l'objet Business mais soit les codes pour enregistrer et tout c'est que dans les objets DAO et pas dans les objets métier pourquoi pas.

Discussions similaires

  1. Des données dans les objets métiers?
    Par Kaoutchou dans le forum Architecture
    Réponses: 0
    Dernier message: 02/02/2010, 21h22
  2. Quel archi pour les objets métiers (modèle de domaine)
    Par anicaise dans le forum Général Java
    Réponses: 4
    Dernier message: 30/06/2008, 11h00
  3. [POO] débutante dans les objets COM
    Par SandraG dans le forum Langage
    Réponses: 11
    Dernier message: 16/03/2006, 12h03
  4. [DAO] Faire le lien entre les VO et les Objets Métiers
    Par mauvais_karma dans le forum Hibernate
    Réponses: 12
    Dernier message: 25/11/2005, 15h19
  5. Navigation dans les objets
    Par hunter dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/05/2005, 11h31

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