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

Langage Java Discussion :

[Language][DAO]Pourquoi pas des Singletons ?


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 287
    Points : 169
    Points
    169
    Par défaut [Language][DAO]Pourquoi pas des Singletons ?
    Bonjour,

    je me sers du design pattern dao dans un de mes projets. Je me demande pourquoi ne pas faire de ces objets (les dao) des Singletons, car après tout je n' ai besoin que de une instance par objet ? Voyez vous des objections ?

    merci
    le daoud

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 78
    Points : 81
    Points
    81
    Par défaut
    bonjour le Daoud,

    Je ne connais pas vraiment les DAO car je débute, mais je peux te citer qqes problèmes relatifs aux singletons, qui ne se présentent que dans certains cas:
    -si ton application doit être thread safe, il faut implémenter très précautionneusement ton singleton
    - si tu utiliser un synchronized global pour implémenter ce singleton, les performances peuvent s'en trouver très réduite, et c'est la question qui nous intéresse peut-être par rapport aux DAO dont tu parles

    Encore une fois je ne suis que débutant et c'est à peine un ébauche de reflexion...

    En espérant que des personnes plus compétentes apportent leur pierre à l'édifice

  3. #3
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 287
    Points : 169
    Points
    169
    Par défaut
    Merci pour ta réponse,

    Je ne vais pas utiliser de thread.
    Une classe DAO est une classe qui permet d'accéder aux donner. Ainsi je vais faire par exemple :

    ArrayList resultat = livreDao.findAll();

    a+
    daoud

  4. #4
    Rédacteur
    Avatar de lunatix
    Homme Profil pro
    Architecte technique
    Inscrit en
    Novembre 2002
    Messages
    1 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 960
    Points : 3 736
    Points
    3 736
    Par défaut
    pas de thread, donc tu ne vas pas utiliser cela a partir de servlet ?

    en fait, oui, tu peux en faire des singletons, mais ca n'a aucun interet, sauf si tu prevois de gerer du cache dans tes DAO (par exemple sur les tables de référence)

  5. #5
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 287
    Points : 169
    Points
    169
    Par défaut
    Mon idée, mais elle (peut-être fausse) était de récupérer mes objets plus facilement, plutôt que de ballader des réfrences.

    Ainsi par exemple si j'ai une classe qui possede deux fonctions qui utilisent le même type de dao, plutôt que de leur passer une reference, je pensais récupérer dans ces fonctions mes dao par un getInstance...

    merci
    le daoud

  6. #6
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Citation Envoyé par badjojo
    bonjour le Daoud,

    Je ne connais pas vraiment les DAO car je débute, mais je peux te citer qqes problèmes relatifs aux singletons, qui ne se présentent que dans certains cas:
    -si ton application doit être thread safe, il faut implémenter très précautionneusement ton singleton
    - si tu utiliser un synchronized global pour implémenter ce singleton, les performances peuvent s'en trouver très réduite, et c'est la question qui nous intéresse peut-être par rapport aux DAO dont tu parles

    Encore une fois je ne suis que débutant et c'est à peine un ébauche de reflexion...

    En espérant que des personnes plus compétentes apportent leur pierre à l'édifice
    Hello,

    Concernant le probleme de thread safe.. il faut utiliser un threadLocal au sein de singleton..

    Il y a un tutoriel sur developpez.com
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  7. #7
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 287
    Points : 169
    Points
    169
    Par défaut
    merci pour ta réponse,

    mais je ne travaille pas avec les threads...

    Voici un exemple de ce qui je pense peut justifier l'utilisation de singletons, mais j'ai des doutes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class toto {
      //génère u graph
      public Graph generateGraph1(){
          //utilisation de la classe Dao1
      }
      //génère un autre graph
      public Graph  generateGraph2(){
          //utilisation de la classe Dao1
      }
    }
    Ici j'utilise Dao1 dans deux méthodes, donc soit je passe à mon contructeur une ref sur un objet Dao1 et l'affecte à une variable d'instance, soit je peux appeler la méthode Dao1.getInstance().

    Voilou, (est-ce de la prise de tête inutile ? )

    merci

  8. #8
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 287
    Points : 169
    Points
    169
    Par défaut
    Je fais remonter ce message, si quelqu'un peut me répondre par oui ou non...

    a+
    daoud

  9. #9
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par le Daoud
    Voici un exemple de ce qui je pense peut justifier l'utilisation de singletons, mais j'ai des doutes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class toto {
      //génère u graph
      public Graph generateGraph1(){
          //utilisation de la classe Dao1
      }
      //génère un autre graph
      public Graph generateGraph2(){
          //utilisation de la classe Dao1
      }
    }
    Ici j'utilise Dao1 dans deux méthodes, donc soit je passe à mon contructeur une ref sur un objet Dao1 et l'affecte à une variable d'instance, soit je peux appeler la méthode Dao1.getInstance().
    Bonsoir,
    non, ça n'a pas grand chose à voir avec les singletons.
    En fait pourquoi chercher à introduire une dépendance aussi forte entre la classe toto et la classe Dao1 ?
    A mon sens, il faudrait plutôt passer une instance de Dao1 à chacune des méthodes qui en ont besoin. Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class toto {
      public Graph generateGraph1(Dao1 dao){
      }
     
      public Graph  generateGraph2(Dao1 dao){
      }
    }
    ou alors, comme tu le dis, passer au contructeur de toto une ref sur un objet Dao1 et l'affecte à une variable d'instance.
    Autant que possible, adopter une programmation tout objet améliore l'indépendance de tes classes et facilite l'évolutivité de ton logiciel.

  10. #10
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 287
    Points : 169
    Points
    169
    Par défaut
    Merci beaucoup pour ta réponse,

    mais je ne vois pas en quoi le fait de passer une reference rend la classe moins dépendante que si j'utiliser Dao1.getInstance() ? Peutx-tu m'éclairer :

    merci

    daoud

  11. #11
    Expert éminent

    Avatar de christopheJ
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 600
    Points : 8 235
    Points
    8 235
    Par défaut
    Si pour une raison quelconque tu es amené à faire évoluer ta classe Dao1 en la dérivant par exemple, tu es obligé de réécrire tous les appels en Dao1Fille.getInstance(). Alors que si tu lui passes une référence au constructeur, en vertu du polymorphisme, tu peux donner une référence à Dao1Fille.
    L'idéal étant même de travailler avec des interfaces comme IDao qui peut te permettre d'utiliser plusieurs implémentation de ta classe Dao comme on le fait avec Spring (DaoFichier, DaoSGBD, DaoWebService, DaoXML...).

  12. #12
    Membre habitué Avatar de le Daoud
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2002
    Messages : 287
    Points : 169
    Points
    169
    Par défaut
    Merci à tous, génial

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 15/12/2015, 21h54
  2. Réponses: 26
    Dernier message: 05/02/2007, 16h57

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