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 :

(dé)sérialisation & conception


Sujet :

C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut (dé)sérialisation & conception
    Bonjour,

    J'ai une question sur la manière, ou plutôt sur l'endroit, où sérialiser une instance de classe.

    La fonction faisant le boulot devrait-elle être implémentée au sein de la classe, ou à l'extérieur de celle-ci ?

    J'ai à plusieurs reprises vu les 2 méthodes, mais ne me suis pas encore fait une religion.

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    On peut le voir à la mode "ToString".
    Je dirais qu'en C++ on a la liberté de le faire à l'extérieur (grâce aux opérateurs de flux).

    Boost.Serialize permet les 2 méthodes, en tout cas. Comme quoi c'est vraiment ouvert. ^^
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    On peut le voir à la mode "ToString".
    C'est ce que j'ai actuellement dans du code, avec pour la désérialisation, des foncteurs du genre CastStringToMyClass.
    Dans la cadre d'une refactorisation plus globale, je mets ça sous forme de template spécialisés: CastStringTo<MyClass> (plus lisible, selon moi).
    La modif est rapide, mais je me disais que ça tenait éloignée la structure des données (définie dans la classe) du code de (dé)sérialisation.

  4. #4
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 045
    Points : 11 368
    Points
    11 368
    Billets dans le blog
    10
    Par défaut
    "Une classe doit-elle savoir comment se (dé)sérialiser ?"

    Je serais tenté de dire non, tant il y a de manières d'appréhender la (dé)sérialisation.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Citation Envoyé par dragonjoker59 Voir le message
    "Une classe doit-elle savoir comment se (dé)sérialiser ?"

    Je serais tenté de dire non, tant il y a de manières d'appréhender la (dé)sérialisation.
    Si on prend l'exemple de Boost.Serialize, le fait que ça soit dedans ou dehors n'empêche aucunement le fait de sérialiser de différentes façons vu qu'on met juste ce qu'on veut sérialiser grâce à un flux et qu'il se débrouille avec ça (que ça soit pour la sérialisation binaire ou texte par la suite). Dans tous les cas, même si on déclare l'opérateur de flux à l'extérieur il faudra déclarer la fonction amie et que celle-ci soit au courant des membres privés de la classe et donc que les deux soient quand même fortement couplé (si on avait de l'introspection ça changerait la donne mais bon...). Conclusion, sans autres raisons que le style, je pense pas que ça soit une décision très importante.

  6. #6
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Personnellement j'écris une méthode template qui appelle l'opérateur & entre un archive_t et chaque attribut de la classe. Ensuite c'est à la bibliothèque de (dé)sérialization de faire son travail.
    Cela marche directement pour Boost.Serialize mais j'ai dû créer des classes proxys qui sont une sorte d'archive SFML pour envoyer et recevoir ces types sur le réseau.
    (Ça peut casser l'encapsulation mais c'est au programmeur de ne pas utiliser cette méthode pour faire n'importe quoi).

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    OK. Je vais donc laisser tout ça à l'extérieur.

    Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/01/2006, 16h53
  2. [Concept] Métadatas ?
    Par melinda dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 10/11/2004, 12h56
  3. [Concept] Réplication
    Par melinda dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 31/03/2003, 18h29
  4. [Concept] Curseur coté client et curseur coté serveur
    Par freud dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 13/09/2002, 23h13
  5. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 17h16

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