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

JDBC Java Discussion :

Problème de compréhension du modèle DAO


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut Problème de compréhension du modèle DAO
    Bonjour. Je viens tout juste découvrir le pattern DAO que je me pose quelque question. Par exemple sur OCR Herby propose
    Nom : 041029D1jJZn14.png
Affichages : 707
Taille : 3,4 Ko

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par cultureman Voir le message
    je me pose quelque question
    Laquelle ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti

    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut
    Oui , un oubli.
    Pour la méthode find , il se peut qu'on veuille faire la recherche en fonction d'un autre critère que l'id. Dans ce cas faudrait-il utiliser 4 interfaces(pour chaque xxxDAO)?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Le pattern DAO définit juste un moyen d'accèder à une source de données, de manière indépendant de cette source (que ça soit une base de données JDBC, un serveur de fichiers, un système de persistence d'objet, etc).

    Il n'y a qu'une seule interface ici, qui définit le CRUD (Create/Read/Update/Delete) : les 4 actions qu'on peut avoir à faire. On pourrait découper en plusieurs interfaces, si on voulait séparer les notions "Lecture Seule" et "Lecture/Ecriture". La méthode find(id) donnée dans l'exemple, n'est qu'une version simplifiée de l'action Read. En plus rien n'empêche d'avoir plusieurs méthodes pour chaque action. Par exemple, on peut avoir une méthode find(id) pour trouver l'objet suivant son id, et une méthode find(IFilter) avec IFlter une interface fonctionnelle, pour trouver des enregistrements selon une combinaison de critères quelconques. tu peux même avoir une méthode getAll() (qui retourne un itérateur paginé, pas la liste de tous les enregistrement...).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti

    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut
    Merci beaucoup pour votre réponse. J'ai donc essayé de faire une méthode trouver un peu générique

    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
     
     
    public OperateurPhysique[] trouver(String filtre, Object... objs) 
    {
            ResultSet res;
            OperateurPhysique[] ops = null;
            String sql = "SELECT * FROM matable WHERE ";
            StringTokenizer tokens = new StringTokenizer(filtre, ";");
            int t = objs.length;
            for(int i = 0 ; i < t ; i++)
            {
                if(i == 0)
                    sql += tokens.nextToken() + " =  " + objs[i];
                else
                    sql += "AND " + tokens.nextToken() + " =  " + objs[i];
     
            }
     
           //reste du code
        }

    Ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trouver("nom;prenom" , "Lupin" , "Arsene")
    exécutera la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE nom = 'Lupin' AND prenom = 'Arsène'
    Bien sur je compte utiliser des requêtes préparées plus tard.
    Qu'en pensez vous?

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cultureman Voir le message
    Bien sur je compte utiliser des requêtes préparées plus tard.
    Qu'en pensez vous?
    Je pense qu'il vaudrait mieux utiliser les PreparedStatement au plus tôt. Par contre, attention à la problématique d'être très lié à une base de données relationnelle SQL, dans le cadre général d'un DAO.
    Dans la pratique, comme il est plus complexe de faire un DAO complètement générique du point de vue du système de persistance, on peut faire, comme tu as fait, un filtre SQL si on a un SGBD SQL, surtout qu'il y a peu de risque que cela change un jour dans l'application.

    Mais, ça ne coûte pas grand chose et ce n'est pas spécialement très complexe de faire un filtre un peu plus abstrait, donc au lieu d'une chaîne de faire des interfaces pour manipuler un arbre de conditions, et faire une unique implémentation concrète qui transforme cet arbre en SQL. Ça prend beaucoup plus de temps quand même que pour une simple String, mais par rapport à un filtre pour PreparedStatement, on a des éléments similaires.
    Ainsi, migrer d'une base vers autre chose, n'impliquera que l'implémentation du DAO concrète, pas les classes qui l'invoquent. De même pour le parcourt du résultat, qui devrait se faire en externe (pour rendre totalement transparent le parcourt de résultat réduit, complet, partiel, paginé, etc..., une sorte ResultSet DAO). C'est en tout cas un exercice intéressant à faire dans le cadre du travail sur les DAO.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. [Débutant] problème de compréhension
    Par Sylvester dans le forum Général Java
    Réponses: 18
    Dernier message: 21/07/2005, 09h16
  2. Réponses: 5
    Dernier message: 11/04/2005, 10h21
  3. [C#] Problème de compréhension de System.Convert ET Provider
    Par papouAlain dans le forum Windows Forms
    Réponses: 5
    Dernier message: 18/11/2004, 21h52
  4. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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