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 :

[DAO] Gestion des DAO et valeur de retour


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 2
    Par défaut [DAO] Gestion des DAO et valeur de retour
    Bonjour,

    Je développe en Java, et je dois réaliser un projet Web.
    Ce n’est peut-être pas le bon forum, mais ma question concerne essentiellement l’accès aux données et au DAO.

    J’ai bien mis en place les objets modèles, le DAO et les services.

    Quand j’interroge la base via mon DAO qui doit me renvoyer un seul élément (interrogation par l’ID), que doit me renvoyer le DAO ?

    Par défaut, je renvoie un objet « vide », dans lequel j’ai ajouté un attribut qui m’indique si j’ai trouvé ou non cette objet.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
           // début de la méthode
           Utilisateur utilisateur = null;
     
           try {
               cx = getConnexion();
               st = cx.prepareStatement("select user, username, password from utilisateur where id = ?");
               st.setString(1, id);
               rs = st.executeQuery();
               if (rs.next()) {
                   String nom = rs.getString(1);
                   String prenom = rs.getString(2);
                   String motDePasse = rs.getString(3);
     
                   utilisateur = new Utilisateur();
                   utilisateur.setIdentifiant(id);
                   utilisateur.setNom(nom);
                   utilisateur.setPrenom(prenom);
                   utilisateur.setMotDePasse(motDePasse);
    		utilisateur.setTrouve(true) ;
     
               }
    } catch (Exception e) {
           utilisateur = new Utilisateur();
    	utilisateur.setTrouve(false) ;
    }
     
    return utilisateur ;

    Ce fonctionnement me semble avantageux, car dans tous les cas je récupère un Utilisateur.
    Ensuite, il y a juste à vérifier si on l’a bien trouvé avec une méthode isTrouve().

    Quand pensez-vous ?

    Mes collègues ne sont pas d’accord avec moi, pouvez-vous me donner quelques arguments pour les convaincre ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Par défaut, je renvoie un objet « vide », dans lequel j’ai ajouté un attribut qui m’indique si j’ai trouvé ou non cette objet.
    Ce fonctionnement me semble avantageux, car dans tous les cas je récupère un Utilisateur.
    Ensuite, il y a juste à vérifier si on l’a bien trouvé avec une méthode isTrouve().
    Désolé mais je peux pas vraiment t'aider

    Un Dao pait partie de la couche d'accès aux données. Il n'est pas censé te créer d'objet si il y en a pas en base.
    Ensuite le fait de toujours renvoyé un objet oblige le client du service dao de vérifier lors du retour de l'appel, le résultat returnedObject.isTrouve().
    C'est pas forcément intuitif comme procédé.
    Si la requête ne trouve pas de résultat, on s'attend généralement à recevoir null de ton DAO.
    Pourquoi ? C'est plutôt logique, courant dans les api java et enfin tu gagnes en concision de code tant coté client dao (vérif à null suffit) que dao (tu renvoies directement null).
    Ex api java: quand tu fais un get(Objet key) sur une Map, si aucune clef n'est enregistré dans la map, tu reçois null.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Ou tu peux aussi utiliser une exception.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Ou tu peux aussi utiliser une exception.
    Quel intérêt ?
    Si elle est de type runtime et qu'elle est pas catché coté client, ca va faire planter l'application alors que c'est pas le comportement demandé (vu le if isTrouve).
    Si elle est de type checked, c'est pas beaucoup mieux, ca oblige à écrire du code pour la catcher coté client.

    Une exception lancée par un client est faite principalement pour :
    - arrêter l'application lors d'une erreur irrécupérable.
    - remonter une erreur métier et ou technique et laisser une chance à l'appelant de traiter l'erreur.
    - ajouter de la sémantique à l'erreur lorsqu'il y en a plusieurs de possibles pour un même service(ce qu'un boolean ne permet pas par exemple)

    Le cas présenté n'entre dans aucun des cas ou l'exception apporte un avantage.
    Si on lance des exceptions à chaque fois que nos services ne renvoient pas de résultat, bonjour le code illisible.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Donc les auteurs des frameworks, de type Hibernate, qui génèrent ce type d'exception n'ont rien compris ?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Je savais pas qu'Hibernate te renvoyait une exception lorsqu'il n'y avait pas de résultat à une réquête de type find(id).
    Faudrait que tu me donnes ta version d'Hibernate

Discussions similaires

  1. Gestion des fichiers clés/valeurs
    Par Franck.H dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 16h59
  2. [Data] Faire des requêtes en dur avec des DAO
    Par hocinema dans le forum Spring
    Réponses: 8
    Dernier message: 22/04/2010, 09h50
  3. Gestion des erreurs et valeurs de retour des procedures stockées
    Par sarah65536 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/04/2009, 11h07
  4. Gestion des transactions et DAO
    Par Alec6 dans le forum Hibernate
    Réponses: 2
    Dernier message: 02/02/2009, 13h53
  5. [MySQL] Gestion des retour à la ligne
    Par Husqvarna dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/10/2005, 10h14

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