Bonjour tout le monde.
 
Pour sauvegarder/restaurer les données d'un programme de comptabilité personnelle, je voudrais utiliser un fichier XML du genre :
 
<sauvegarde>
<Objet classe="Credit" Version="1.0">...</Objet>
<Objet classe="Debit" Version="1.0">...</Objet>
</sauvegarde>
 
La version correspondrait à une version de la classe, permettant au programme mis à jour de lire un fichier provenant d'une version précédente.
Chaque classe sauvegardée aurait la responsabilité d'importer les données qui l'intéresse pour créer les objets.
 
Class Credit {
 
     private static ArrayList<Credit> listeCredit = new ArrayList<Credit>();
 
     public static Credit importer(noeud XML) {
          ...
          [Ajout du nouvel objet Credit à listeCredit]
     }
}
Class Credit {
 
     private static ArrayList<Debit> listeDebit = new ArrayList<Debit>();
 
     public static Debit importer(noeud XML) {
          ...
          [Ajout du nouvel objet Debit à listeDebit]
     }
}
 
Mais comment appeler ses méthodes classiques ? Je pense créer une classe GestionnaireSauvegarde qui parcourt le XML et appelle les différentes méthodes d'importations en fonction de la classe de l'objet.
Je n'ai pas les classes/méthodes XML en tête alors je vais faire du pseudo code, désolé.
 
Je sais faire ça :
 
class GestionnaireSauvegarde{
 
public void exporter(String fichierXML){
     [Créer le fichier XML]
     
     [DEBUT Pour chaque objet à sauvegarder]
     racineXML.ajouterNoeud(objet.exporter);
     [FIN Pour chaque objet]
}
 
public void importer(String fichierXML){
     [Ouvrir le fichier XML]
       
     [DEBUT Pour chaque balise sous la racine]
     nomClasse = balise.getParameter("classe" );
     if(nomClasse.equals("Credit" )) Credit.importer(balise)
     if(nomClasse.equals("Debit" )) Debit.importer(balise)
     [FIN Pour chaque balise sous la racine]
}
 
}
 
Ce qui m'oblige à créer une ligne if(classe.equals("<classe>" )) <classe>.importer(balise)
Et je vais en gérer plusieurs des classes comme cela.
 
J'aimerais plutôt faire :
 
[DEBUT Pour chaque balise sous la racine]
nomClasse = balise.getParameter("classe" );
Class classe = Class.forName(nomClasse);
classe.importer(balise)
[FIN Pour chaque balise sous la racine]
 
Mais là, même si je gère une exception pour méthode non existante le compilateur va me jeter bien sûr 
  
 
- Ma méthode d'importation est-elle intéressante ?
 - Comment appeler la méthode statique importer(Noeud XML) dynamiquement ?
 
J'espère avoir été clair en tout cas 
Et merci
 
Message édité par moustik510 le 13-04-2010 à 10:27:32