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

Design Patterns Discussion :

Pattern pour le versioning


Sujet :

Design Patterns

  1. #1
    Membre actif Avatar de roots_man
    Inscrit en
    Août 2004
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 328
    Points : 282
    Points
    282
    Par défaut Pattern pour le versioning
    Bonjour,

    Je développe actuellement un web service ou je passe en paramètre un numéro de version (1,2,3,4...). Je souhaite garder la compatibilité entre les version. cela signifie que si je suis a la version 4, j'aimerais que la 1-2-3 fonctionne également. Je travaille avec des objet qui sont par la suite sérialiser en xml, json. Concernant le versioning de la structure de mes objets (je rajoute mes datamember en facultatif en gardant les anciens facultatif également), il y a pas de problème. C'est plus au niveau de la construction de mon objet a partir du paramètre de version (1,2,3,4..).

    Est-ce que quelqu'un peut me proposer un design pattern à utiliser ??

    Merci d'avance
    powder skiing is not a crime

  2. #2
    Membre actif Avatar de roots_man
    Inscrit en
    Août 2004
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 328
    Points : 282
    Points
    282
    Par défaut
    Je vais donner un exemple ca sera certainement plus facile a comprendre mon problème. Donc la partie webservice fonctionne correctement. Une methode du web service fait appel à la fonction "GetFirstUser" de ma classe "ClassUser" qui retourne un objet User (nom, prénom, age).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //Web service call
    ClassUser maClasse = new ClassUser();
    maClasse.GetFirstUser("1");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //function GetFirstUser v1
    private User GetFirstUser(string version)
    {
      User u = new User();
      u.Nom = "Test";
      u.Prenom = "1";
      u.Age = 19;
    
      return u;
    }
    Cela fonctionne parfaitement. Mais maintenant, la structure de mon objet User a évolué (nom, prénom, email, téléphone, age) et j'aimerais que le GetFirstUser ci-dessus (version 1) soit toujours en fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //function GetFirstUser v2
    private User GetFirstUser(string version)
    {
      User u = new User();
      u.Nom = "Test";
      u.Prenom = "1";
      u.Email = "asdf@info.com"
      u.Telephone = "+xx xxxxxx"
      u.Age = 19;
    
      return u;
    }
    J'aimerais donc savoir s'il existe un pattern qui pourrais m'éviter de faire les choses suivantes :
    1. Ecrire 2 fonction (GetFirstUserV1 et GetFirstUserV2) en changeant seulement 1-2 ligne de code dans toute la fonction et le reste est idientique dans les deux fonctions
    2. Faire un/des if(version.equals(2))...

    L'exemple ci-dessus est un petit exemple. dans mon travail, les fonction font plusieurs centaines de ligne et faut savoir que il risque d'y avoir plusieurs version (+10).

    J'espère avoir été plus clair !

    Merci d'avance pour votre aide
    powder skiing is not a crime

  3. #3
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Les gens qui ont travaillé sur le sujet du versioning sont arrivés à des solutions un peu plus complexes..........car c'est un sujet complexe.
    Il faut plus qu'un design pattern, il faut un système de gestion du versioning et dépendances entre versions et ça s'appelle OSGI.

    Tout cela car le versioning ne se limite pas au versioning de l'interface de ton système, tu le vois toi même avec la problématique des données passées en entrée/sortie. Tu vas te poser aussi des questions sur les "couches" d'après. Comment faire que des règles de gestion qui n'existaient pas avant soit vérifiées maintenant avec la nouvelle version de ton application.

    Bon je n'ai as trop fait avancé ton problème

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 89
    Points : 50
    Points
    50
    Par défaut Héritage ?
    Hello,
    Et-ce que l'héritage ne serait pas une façon de résoudre ton problème ? En gros tu définis une classe GetUser et chaque version hérite de la précédente ?
    Christian

  5. #5
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par coberle Voir le message
    Et-ce que l'héritage ne serait pas une façon de résoudre ton problème ?
    Christian
    Une solution que j'utilise pour gérer les différentes versions de données repose sur les patterns Stratégie et surtout Fabrique. Ceci repose comme dit @Coberle sur l'héritage.

    En gros,
    - définir une classe ancêtre commune aux différentes versions,
    - ne modifier donc que les éléments spécifiques dans chaque version (et réduire le travail de maintenance),
    - selon la version de la donnée reçue, appeler l'une ou l'autre fabrique pour construire l'objet demandé.

Discussions similaires

  1. Quel design pattern pour réaliser une synthèse
    Par jbwan dans le forum Design Patterns
    Réponses: 3
    Dernier message: 21/04/2006, 13h39
  2. Langues disponibles pour la version 9.3
    Par spiwis dans le forum SUSE
    Réponses: 2
    Dernier message: 22/03/2006, 15h16
  3. Equivalent a fonction DATEDIFF pour MySQL version 3.23
    Par npze dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 31/10/2005, 12h18
  4. Drivers pour 2 versions differentes de red hat
    Par schnourf dans le forum Matériel
    Réponses: 2
    Dernier message: 21/10/2005, 12h18
  5. Design Patterns pour l'Evolutivité ?
    Par TrollMaster dans le forum Design Patterns
    Réponses: 7
    Dernier message: 20/01/2005, 13h47

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