Précédent   Forum du club des développeurs et IT Pro > Général Développement > ALM > Design Patterns
Design Patterns Forum d'entraide sur l'utilisation des Design Patterns (GRASP, GOF, etc.) et la recherche de solution à des problèmes récurrents. Avant de poster : Les tutoriels sur les DP. Privilégiez le forum Architecture pour vos questions sur les patterns architecturaux (PAC, MVC, etc.)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/06/2012, 13h44   #1
roots_man
Membre confirmé
 
Avatar de roots_man
 
Inscription : août 2004
Messages : 328
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 328
Points : 227
Points : 227
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
roots_man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2012, 17h04   #2
roots_man
Membre confirmé
 
Avatar de roots_man
 
Inscription : août 2004
Messages : 328
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 328
Points : 227
Points : 227
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 :
1
2
3
//Web service call
ClassUser maClasse = new ClassUser();
maClasse.GetFirstUser("1");
Code :
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 :
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
roots_man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2012, 21h04   #3
ego
Rédacteur
 
Homme
Inscription : juillet 2004
Messages : 1 822
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : juillet 2004
Messages : 1 822
Points : 3 120
Points : 3 120
Envoyer un message via ICQ à ego
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
__________________
http://ego.developpez.com
ego est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2012, 17h45   #4
coberle
Membre à l'essai
 
Inscription : janvier 2008
Messages : 84
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 84
Points : 20
Points : 20
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
coberle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2012, 13h00   #5
Cincinnatus
Membre du Club
 
Inscription : mars 2007
Messages : 45
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 45
Points : 63
Points : 63
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é.
Cincinnatus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h43.


 
 
 
 
Partenaires

Hébergement Web