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

UML Discussion :

Design de fonction Save et Load


Sujet :

UML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Points : 34
    Points
    34
    Par défaut Design de fonction Save et Load
    Bonjour,

    J'essaye, autant que je peux, de choisir le meilleur design pour mes classes, mais là je suis aboulique.

    A chaque fois que je dois implémenter des méthodes de sauvegarde/chargement, je me pose la question du design le mieux adapté. Pour trancher une bonne fois pour toute, j'utilise mon joker : "je demande au public JP".

    Je vois 2 solutions (pseudo code c++):

    SOLUTION 1 :
    class Foo
    {
    void Load();
    void Save();
    };

    dans le code, l'appel ressemble a ca :

    Foo fooInst;
    fooInst.Load();

    En gros, chaque instance sait s'autogérer

    ou

    SOLUTION 2
    class Bar
    {
    static void Load(Bar& barObject);
    static void Save(Bar& barObject);
    }

    dans le code, j'aurai : Bar::Save(barInst) qu'on peut interpréter comme si la classe gère les instances.

    Qu'est ce qui vous semble le plus correct (pour info les classes concernées représentes des Animations, caméras, ...) ?
    Est ce qu'il existe des cas où il vaut mieux préférer l'un à l'autre ?

    Vous pouvez aussi répondre : "tu te prends trop la tete, c'est pareil, prends en un au hasard"...

    Merci d'avance !

    EDIT : je pense que la méthode statique est moins performante que l'autre, à cause d'un passage d'un paramètre, non ?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 38
    Points : 34
    Points
    34
    Par défaut
    Bon, je pense avoir trouver la solution. Je vais différencier les 2 méthodes.

    Lors d'un Save, l'objet est censé être valide, il peut donc se sauvegarder. J'opterai donc pour la fonction membre.

    Pour le Load, l'état de l'objet pose problème. En effet, si c'est une fonction membre, on aura le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Foo fooInst;
    fooInstLoad;
    Ca m'oblige à écrire un constructeur qui initialise les variables membres à des valeurs par defaut. Or l'objet serait inutilisable et cela favoriserait les erreurs possibles. On pourrait par exemple faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Animation anim;
    anim.Save()
    ou
    anim.Play();
    ..ce qui ne serait pas correct. Si je peux éviter ce genre d'erreur grace au design, c'est mieux.

    D'où le choix d'utiliser un Load statique qui renvoie un objet Animation.


    Si certains ont des remarques, qu'ils n'hésitent pas!

  3. #3
    Membre actif Avatar de ze_corsaire
    Inscrit en
    Décembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2007
    Messages : 240
    Points : 273
    Points
    273
    Par défaut
    Je serais plutôt pour une ou des classes externalisées qui prennent en charge les traitements considérés. Car dans le cas contraire, tu ne pourras pas factoriser les traitements communs des différentes "Animations".
    Donc plutôt ta solution 2, mais avec un singleton.

    ______________

  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
    Points : 13 017
    Points
    13 017
    Par défaut
    Je partage l'avis de ze_corsaire. Une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class FooBarLoader
    {
    public:
       Foo*Load(...);
    }
    
    class FooBarSaver
    {
    public:
        void Save(Bar*,...);
    }
    Ca permet de regrouper ce qui est spécifique à la sauvergarde/lecture dans ta classe.

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    3DArchi >> On est dans le forum conception, donc dehors les pointeurs !
    Sinon, pour moi c'est chaque objet qui devrait être responsable de charger ses propres données, je vote donc la méthode 1.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 359
    Points : 36 888
    Points
    36 888
    Par défaut
    Citation Envoyé par ze_corsaire Voir le message
    Je serais plutôt pour une ou des classes externalisées qui prennent en charge les traitements considérés. Car dans le cas contraire, tu ne pourras pas factoriser les traitements communs des différentes "Animations".
    Donc plutôt ta solution 2, mais avec un singleton.

    ______________
    La solution 2 propose des méthode de classe.
    Pourquoi ajouter "singleton"?
    Juste curieux ;-(
    - W

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 359
    Points : 36 888
    Points
    36 888
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    3DArchi >> On est dans le forum conception, donc dehors les pointeurs !
    Sinon, pour moi c'est chaque objet qui devrait être responsable de charger ses propres données, je vote donc la méthode 1.
    Pour le save, çà ne pose pas trop de problème.
    Pour le load, çà peut se discuter.
    Ceci dit dans le cas particulier, Animation représente un objet dont une partie est persistante - le contenu du fichier "disque" - et dont l'état { chargé, sauvé } peut être de la responsabilité de l'objet.
    Donc la méthode 1 me plait bien aussi.
    - W

  8. #8
    Membre actif Avatar de ze_corsaire
    Inscrit en
    Décembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2007
    Messages : 240
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    La solution 2 propose des méthode de classe.
    Pourquoi ajouter "singleton"?
    Juste curieux ;-(
    - W
    Ouais, pardon, c'est l'habitude du java !
    Je n'ai pas vu qu'il pouvait s'agir de la déclaration d'une interface dans un autre langage.
    Mais cela ne change pas mon point de vue !

    __________

  9. #9
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Je reste partisant d'un loader et d'un saver séparé. Ca permet souvent de factoriser des devs, de permettre des chargements en lots, d'évoluer plus rapidement....

Discussions similaires

  1. [DOM] fonction Save CSS
    Par delphine S dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/01/2008, 14h52
  2. Réponses: 1
    Dernier message: 19/04/2007, 09h08
  3. Sauvegarde de fichier 'fonction save'
    Par sseneor dans le forum MATLAB
    Réponses: 4
    Dernier message: 21/03/2007, 22h52
  4. SAVE and LOAD
    Par morrison29 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 22/11/2006, 12h58
  5. fonction save()
    Par medtaher dans le forum C++
    Réponses: 1
    Dernier message: 26/10/2005, 15h08

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