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
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
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
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
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)
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
Hello,Envoyé par badjojo
Concernant le probleme de thread safe.. il faut utiliser un threadLocal au sein de singleton..
Il y a un tutoriel sur developpez.com
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 :
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().
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 } }
Voilou, (est-ce de la prise de tête inutile ? )
merci
Je fais remonter ce message, si quelqu'un peut me répondre par oui ou non...
a+
daoud
Bonsoir,Envoyé par le Daoud
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 :
ou alors, comme tu le dis, passer au contructeur de toto une ref sur un objet Dao1 et l'affecte à une variable d'instance.
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){ } }
Autant que possible, adopter une programmation tout objet améliore l'indépendance de tes classes et facilite l'évolutivité de ton logiciel.
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
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...).
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager