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 :

Mapping des objets C++ dans une base de données


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut Mapping des objets C++ dans une base de données
    Bonjour à tous,

    Tout d'abord désolé si mon message n'est pas situé dans le bon forum, c'est mon premier post...

    Je cherche depuis quelques temps un framework permettant de gérer le mapping Objets / Base de Données Relationnelle. L'équivalent de Hibernate pour Java en quelques sortes.

    Pour vous expliquer mon problème plus en détails, je travaille sur le développement d'une application en C++ utilisant une base de données pour assurer la persistence des entités manipulées. Il semble que les bases de données objets ne font pas le poids par rapport aux bases de données relationnelles, et il faut donc assurer le mapping (ORM).

    Il me semble également que tout faire à la main soit très fastidieux...

    Avez-vous déjà été confrontés à ce type de problème ? Quelles sont vos solutions ?

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Oui... mais jamais en C++ directement...

    En C# et en Java, j'utilise Hibernate (ou NHibernate)

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut
    Merci beaucoup pour ta réponse,

    Et donc en C++, quelle solution me proposerais-tu ?

    J'ai bien pensé à passer par CORBA pour utiliser Java et Hibernate, mais j'ai peur que ça soit un peu lourd pour une simple application où la base de données est stockée localement... Est-ce que je me trompe ?

    D'autant plus que je ne suis absolument pas expert en CORBA et Hibernate...

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Je ne connais pas Hibernate donc, je ne sais pas quel est le niveau d'abstraction offert.
    Pour C++, et spécifiquement sous Windows avec Visual et MFC, tu as CRecordSet mais il y a quand même un mapping à faire à la main.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    J'ai fait ça récemment.

    D'abord, dans tes objets, il faut pouvoir faire de propriétés nommées. Par exemple Client::ville portera le nom de "VILLE".
    Le mieux c'est de faire une interface "IProperty" qui possèdera les méthodes ToString() et FromString(). Puis une classe template CProperty<T> (où T sera un int, un bool ou ce que tu veux).

    Ensuite, j'ai fait un fichier XML pour mapper le nom du champ en base avec le nom du champ dans ma structure de données C++.

    Et enfin, je requête la base, pour chaque enregistrement j'ai le nom des champs, je vais dans le mapping retrouver le nom de la propriété à alimenter, puis j'effectue un FromString sur cette propriété.


    A savoir qu'il te faudra quelques petites astuces comme les classes traits de ce genre :
    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
     
    template<class T> DataTrait
    {
         static const char* CODE = "";
    };
     
    template<> DataTrait<CClient>
    {
         static const char* CODE = "CLIENT";
    };
     
    template<> DataTrait<CCommande>
    {
         static const char* CODE = "COMMANDE";
    };
     
    etc...
    Tu verras aussi que ce n'est pas très judicieux de nommer les propriétés au sein des objets mais plutôt des classes, via les pointeurs de membres sur des propriétés car si tu as 2000 objets à charger par exemple, les nommages vont être duppliqué dans chacun d'entre eux et la mémoire explose.

    Voilà voilà

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut
    Merci pour ta réponse !

    Je comprends bien l'idée, mais j'avoue que j'ai du mal à voir précisément comment implémenter tout ça...
    En tout cas, ça confirme bien qu'il n'existe pas de framework correspondant en C++. Il reste donc à tout faire à la main, ou développer soi même ce qui ressemble au framework comme tu le fais.
    Je pense qu'en ce qui me concerne, je vais d'abord faire un mapping manuel, avec l'idée de le faire évoluer à l'avenir vers une solution proche de ce que tu proposes (question de temps...).

Discussions similaires

  1. Insertion des contenus gtkentry dans une base de données
    Par charles9 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 02/06/2008, 18h13
  2. Liste des tables existantes dans une base de données
    Par Lorenzole+bo dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/11/2007, 20h15
  3. [Conception] Stocker des fichiers multimédia dans une base de données
    Par haifa84 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/03/2006, 17h47
  4. Intégration des fichier XML dans une base de données MySQL
    Par bebemoundjou dans le forum XQUERY/SGBD
    Réponses: 8
    Dernier message: 25/11/2005, 22h41
  5. Recuperation des objet ole dans une base SQL
    Par TOPGUN89 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 25/11/2005, 09h14

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