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

C++ Discussion :

classe pour mapper base données prosgresql


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    technicien en électronique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien en électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 527
    Points
    527
    Par défaut classe pour mapper base données prosgresql
    salut,
    j'ai lu ce tutoriel http://cyrille-herby.developpez.com/...c-pattern-dao/

    j'ai fait une classe pour ma première table dans ce style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Table_utilisateur
    {
    protected:
    int m_cle;
    wxString m_nom;
    // j'ai mis 18 attributs en tout
    privated:
    Table_utilisateur();
    Table_utilisateur(int cle,wxString,...);
    int get_id() const;
    void set_id(int id);
    //etc...
    }

    je me demandais pour la classe DAO qui en hérite et qui s'occupe des requètes si il vallait mieux faire des méthodes pour chaque requète comme le tutoriel ou si il fallait plutot faire une méthode dans laquelle on met la requète en variable d'entrée de la méthode du style:

    type insert (wxString ma_requète);
    type create (wxString ma_requète);

    pour la connexion quel différence entre la mettre dans cette class DAO ou en faire une autre qui hérite de cette class DAO? (j'ai vu les 2 méthodes mais je sais pas trop laquelle préferées)

    niveau requète j'ai lu la norme sql ùmais je n'ai fait que 2 ou 3 requètes...

    merci pour votre aide

  2. #2
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Généralement, un des buts du DAO est d'encapsuler les requêtes SQL. Le client ne s'attend pas à devoir passer des chaines SQL. Ca c'est pour l'interface utilisateur. En interne, il faut bien écrire les requêtes quelque part si le system ne les génère pas de lui même.

    Pour la connexion, autant éviter l'héritage si on peut s'en passer.
    Dans le tuto, DAO<T> a un membre Connection connect. Mis à part que ce soit obligatoirement un ConnectionPostgreSQL (car mis en dur), faire de l'agrégation tel que présenté me parait plus judicieux.

    A ta place, avant de trop m'aventurer, je regarderai des librairies existantes qui font déjà un bonne partie du boulot. Il y a des liens là:
    http://www.developpez.net/forums/d82...ibernate-like/

    niveau requète j'ai lu la norme sql ùmais je n'ai fait que 2 ou 3 requètes...
    2 ou 3, c'est déjà mieux que 0

  3. #3
    Membre confirmé
    Homme Profil pro
    technicien en électronique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien en électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 527
    Points
    527
    Par défaut
    merci pour ta réponse...
    je pense utiliser datalayer disponible avec wxwidgets...

    pour hibernate, ça va pas être possible sous linux... j'ai regardé dbdesigner et d'autres équivalent mais aucun ne m'ont séduis.

    Mon soucis en ce moment, c'est d'avoir fait une classe abstraite générique pour mes classes DAO futures et que je m'interroge sur les méthodes à mettre...

    je mettrais le code de cette classe ce soir mais en gros j'ai des méthodes pour créer la table, créer une ligne, modifier, supprimer

    J'utilise progresql et je pensais utiliser aussi les triggers (si je confonds pas) pour être sûr de supprimer 2 lignes de 2 tables en relation... La partie SELECT me pose aussi problème vu que je peut sélectionné une ou plusieurs ligne en fonction de certaines colonnes...

    bref beaucoup de questions que je me pose surtout au niveau algorithmique...

  4. #4
    Membre confirmé
    Homme Profil pro
    technicien en électronique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien en électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 527
    Points
    527
    Par défaut
    voici la liste des classes que j'ai fait pour l'instant:

    table_utilisateurs.h
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    #ifndef TABLE_UTILISATEURS
    #define TABLE_UTILISATEURS
     
    #include <wx/string.h>
     
     
    /*	donne l'architecture des tables pour la gestion des profils du personnel (utilisateurs)
    */
     
    class Table_utilisateurs
    	{
    	protected:
     
    	unsigned int m_cle_id;
    	wxString m_pseudo;
    	wxString m_nom;
    	wxString m_prenoms;
    	char m_sexe;
    	wxString m_date_naissance;
    	wxString m_adresse_rue;
    	wxString m_adresse_ville;
    	unsigned int m_adresse_code_postal;
    	wxString m_email;
    	wxString m_situation;//marié, célibataire,...
    	wxString m_nationalite;
    	wxString m_date_entree;
    	wxString m_date_sortie;
    	wxString m_fonction;
    	wxString m_service;
    	wxString m_statut_permissions;//administrateur,comptabilité,...
     
     
    	public:
     
    	Table_utilisateurs();
     
    	Table_utilisateurs(unsigned int cle_id,wxString pseudo,
    	wxString nom,wxString prenoms,char sexe,wxString date_naissance,
    	wxString adresse_rue,wxString adresse_ville,unsigned int adresse_code_postal,
    	wxString email,wxString situation,wxString nationalite,
    	wxString date_entree,wxString date_sortie,
    	wxString fonction,wxString service,wxString statut_permissions);
     
    	unsigned int get_id() const;
    	void set_id(unsigned int &id);
     
    	wxString get_pseudo() const;
    	void set_pseudo(wxString &pseudo);
     
    	wxString get_nom() const;
    	void set_nom(wxString &nom);
     
    	wxString get_prenoms() const;
    	void set_prenoms(wxString &prenoms);
     
    	char get_sexe() const;
    	void set_sexe(char &sexe);
     
    	wxString get_date_naissance() const;
    	void set_date_naissance(wxString &date_naissance);
     
    	wxString get_adresse_rue() const;
    	void set_adresse_rue(wxString &adresse_rue);
     
    	wxString get_adresse_ville() const;
    	void set_adresse_ville(wxString &adresse_ville);
     
    	unsigned int get_adresse_code_postal() const;
    	void set_adresse_code_postal(unsigned int &adresse_code_postal);
     
    	wxString get_email() const;
    	void set_email(wxString &email);
     
    	wxString get_situation() const;
    	void set_situation(wxString &situation);
     
    	wxString get_nationalite() const;
    	void set_nationalite(wxString &nationalite);
     
    	wxString get_date_entree() const;
    	void set_date_entree(wxString &date_entree);
     
    	wxString get_date_sortie() const;
    	void set_date_sortie(wxString &date_sortie);
     
    	wxString get_fonction() const;
    	void set_fonction(wxString &fonction);
     
    	wxString get_service() const;
    	void set_service(wxString &service);
     
    	wxString get_statut_permissions() const;
    	void set_statut_permissions(wxString &statut_permissions);
    	};
     
    #endif
    table_utilisateurs.cpp
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    #include "table_utilisateurs.h"
    #include <wx/string.h>
     
     
    Table_utilisateurs::Table_utilisateurs()
    {
    }
     
    Table_utilisateurs::Table_utilisateurs(unsigned int cle_id,wxString pseudo,
    	wxString nom,wxString prenoms,char sexe,wxString date_naissance,
    	wxString adresse_rue,wxString adresse_ville,unsigned int adresse_code_postal,
    	wxString email,wxString situation,wxString nationalite,
    	wxString date_entree,wxString date_sortie,
    	wxString fonction,wxString service,wxString statut_permissions):
     
    	m_cle_id(cle_id),m_pseudo(pseudo),
    	m_nom(nom),m_prenoms(prenoms),m_sexe(sexe),m_date_naissance(date_naissance),
    	m_adresse_rue(adresse_rue),m_adresse_ville(adresse_ville),m_adresse_code_postal(adresse_code_postal),
    	m_email(email),m_situation(situation),m_nationalite(nationalite),
    	m_date_entree(date_entree),m_date_sortie(date_sortie),
    	m_fonction(fonction),m_service(service),m_statut_permissions(statut_permissions)
    {
    }
     
     
    unsigned int Table_utilisateurs::get_id() const
    {
    return m_cle_id;
    }
     
    void Table_utilisateurs::set_id(unsigned int &id)
    {
    m_cle_id=id;
    }
     
     
    wxString Table_utilisateurs::get_pseudo() const
    {
    return m_pseudo;
    }
     
    void Table_utilisateurs::set_pseudo(wxString &pseudo)
    {
    m_pseudo=pseudo;
    }
     
     
    wxString Table_utilisateurs::get_nom() const
    {
    return m_nom;
    }
     
    void Table_utilisateurs::set_nom(wxString &nom)
    {
    m_nom=nom;
    }
     
     
    wxString Table_utilisateurs::get_prenoms() const
    {
    return m_prenoms;
    }
     
    void Table_utilisateurs::set_prenoms(wxString &prenoms)
    {
    m_prenoms=prenoms;
    }
     
     
    char Table_utilisateurs::get_sexe() const
    {
    return m_sexe;
    }
     
    void Table_utilisateurs::set_sexe(char &sexe)
    {
    m_sexe=sexe;
    }
     
     
    wxString Table_utilisateurs::get_date_naissance() const
    {
    return m_date_naissance;
    }
     
    void Table_utilisateurs::set_date_naissance(wxString &date_naissance)
    {
    m_date_naissance=date_naissance;
    }
     
     
    wxString Table_utilisateurs::get_adresse_rue() const
    {
    return m_adresse_rue;
    }
     
    void Table_utilisateurs::set_adresse_rue(wxString &adresse_rue)
    {
    m_adresse_rue=adresse_rue;
    }
     
     
    wxString Table_utilisateurs::get_adresse_ville() const
    {
    return m_adresse_ville;
    }
     
    void Table_utilisateurs::set_adresse_ville(wxString &adresse_ville)
    {
    m_adresse_ville=adresse_ville;
    }
     
     
    unsigned int Table_utilisateurs::get_adresse_code_postal() const
    {
    return m_adresse_code_postal;
    }
     
    void Table_utilisateurs::set_adresse_code_postal(unsigned int &adresse_code_postal)
    {
    m_adresse_code_postal=adresse_code_postal;
    }
     
     
    wxString Table_utilisateurs::get_email() const
    {
    return m_email;
    }
     
    void Table_utilisateurs::set_email(wxString &email)
    {
    m_email=email;
    }
     
     
    wxString Table_utilisateurs::get_situation() const
    {
    return m_situation;
    }
     
    void Table_utilisateurs::set_situation(wxString &situation)
    {
    m_situation=situation;
    }
     
     
    wxString Table_utilisateurs::get_nationalite() const
    {
    return m_nationalite;
    }
     
    void Table_utilisateurs::set_nationalite(wxString &nationalite)
    {
    m_nationalite=nationalite;
    }
     
     
    wxString Table_utilisateurs::get_date_entree() const
    {
    return m_date_entree;
    }
     
    void Table_utilisateurs::set_date_entree(wxString &date_entree)
    {
    m_date_entree=date_entree;
    }
     
     
    wxString Table_utilisateurs::get_date_sortie() const
    {
    return m_date_sortie;
    }
     
    void Table_utilisateurs::set_date_sortie(wxString &date_sortie)
    {
    m_date_sortie=date_sortie;
    }
     
     
    wxString Table_utilisateurs::get_fonction() const
    {
    return m_fonction;
    }
     
    void Table_utilisateurs::set_fonction(wxString &fonction)
    {
    m_fonction=fonction;
    }
     
     
    wxString Table_utilisateurs::get_service() const
    {
    return m_service;
    }
     
    void Table_utilisateurs::set_service(wxString &service)
    {
    m_service=service;
    }
     
     
    wxString Table_utilisateurs::get_statut_permissions() const
    {
    return m_statut_permissions;
    }
     
    void Table_utilisateurs::set_statut_permissions(wxString &statut_permissions)
    {
    m_statut_permissions=statut_permissions;
    }

    table_autorisations.h
    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
    29
    30
    31
    32
    33
    #ifndef TABLE_AUTORISATIONS
    #define TABLE_AUTORISATIONS
     
    #include <wx/string.h>
     
     
    /*	donne l'architecture des tables pour la gestion des autorisations du personnel
    */
     
    class Table_autorisations
    	{
    	protected:
     
    	unsigned int m_cle_id;
    	wxString m_autorisations;
     
     
    	public:
     
    	Table_autorisations();
     
    	Table_autorisations(unsigned int cle_id,wxString autorisations);
     
    	unsigned int get_id() const;
    	void set_id(unsigned int &id);
     
    	wxString get_autorisations() const;
    	void set_autorisations(wxString &autorisations);
     
    	};
     
     
    #endif
    table_lien_util_auto.h
    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
    29
    30
    31
    32
    33
    34
    #ifndef TABLE_LIENS_UTIL_AUTO
    #define TABLE_LIENS_UTIL_AUTO
     
     
    #include <wx/string.h>
     
     
    /*	donne l'architecture du lien entre les tables utilisateurs et autorisations
    */
     
    class Table_lien_util_auto
    	{
    	protected:
     
    	unsigned int m_id_utilisateur;
    	unsigned int m_id_autorisation;
     
     
    	public:
     
    	Table_lien_util_auto();
     
    	Table_lien_util_auto(unsigned int id_utilisateur,unsigned int id_autorisation);
     
    	unsigned int get_id_utilisateur() const;
    	void set_id_utilisateur(unsigned int &id_utilisateur);
     
    	unsigned int get_id_autorisation() const;
    	void set_id_autorisation(unsigned int &id_autorisation);
     
    	};
     
     
    #endif
    requete_dao.h
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #ifndef REQUETE_DAO
    #define REQUETE_DAO
     
    #include <wx/string.h>
     
     
    /*
    */
     
    template<typename table>
    class Requete_dao
    	{
    	public:
     
    	virtual bool creer_table(wxString &requetesql)
    	{
    	}
     
    	virtual bool creer_ligne(table &ligne)
    	{
    	}
    	virtual bool modifier_ligne(table &ligne)
    	{
    	}
     
    	virtual bool lire_ligne(table &ligne)
    	{
    	}
     
    	virtual bool supprimer_ligne(table &ligne)
    	{
    	}
     
    	virtual ~Requete_dao()
    	{
    	}
     
    	};
     
     
    #endif // REQUETE_DAO
    pour cette dernière, je sais pas trop comment la faire exactement...
    que me conseillez vous?

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Indépendamment de toute librairie, je ne ferais pas de classe avec des méthodes get et set pour représenter une table. Une structure simple avec accès public aux membres me parait moins lourd.
    AMHA.

  6. #6
    Membre confirmé
    Homme Profil pro
    technicien en électronique
    Inscrit en
    Octobre 2008
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : technicien en électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 74
    Points : 527
    Points
    527
    Par défaut
    je suis pas sûr que remplacer mes classes de table par des structures soient une bonne solution... peut être mettre les attriuts en protected et les faire hériter serait ne solution mais mon problème majeur n'est pas à ce niveau.

    je m'interroge sur ce que je doit mettre dans requete_dao.h...

    je pense y mettre un appel vers l'instance de connection à la base de données. J'ai déjà regardé du côté des singletons et du threading (je pense faire un thread par utilisateur connecté sur ma base)

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/06/2012, 19h28
  2. Une classe pour contrôler les données saisies ?
    Par bigsister dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2011, 18h00
  3. diagramme de classe pour un base de donnée
    Par gentelmand dans le forum Diagrammes de Classes
    Réponses: 5
    Dernier message: 23/05/2009, 01h30
  4. Réponses: 4
    Dernier message: 02/05/2007, 19h13

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