Bonjour,
je travaille actuellement a mettre en place un module d'import/export de données. Je dispose d'un domaine métier assez simple (mais assez large aussi) et je dois créer un mécanisme permettant d'exporter les données de celui-ci vers d'autres système dans différents formats xml qui pourront varier dans le temps (plus fréquemment en phase de mise au point). Inversement le même format sera utilisé pour importer des données vers mon système.

A terme les personnes qui maintiendront les templates et en ajouteront d'autres n'ont aucune connaissance en programmation, il me faut donc imaginer un framework dynamique... En gros j'ai un ensemble de classes, par exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
public class Post
    {
        public int PostId { get; set; }
        public DateTime Date { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public IList<Comment> Comments { get; set; }
    }
 
    public class Comment
    {
        public int CommentId { get; set; }
        public DateTime Date { get; set; }
        public string Author { get; set; }        
        public string Detail { get; set; }
    }
J'imagine un mécanisme permettant de remplir le fichier template xml suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="iso-8859-1" ?>
  <template id="TmpBASE">
      <Posts>
    		<post type="Core.Domain.Post" id="{{PostId}}">                                                                     
    			<Author>{{Author}}</Author>  
          		<Title>{{Title}}</Title>                                     
    			<Comments bind="Core.Domain.Post.Comments">
    			   <comment id="{{CommentId }}">{{Date}} - {{Author}} - {{Detail}}</comment>
    			</Comments>
        </post>
      </Posts>  
  </template>
La grammaire que j'ai utilisée ressemble au binding xaml car cela me semble approprier.
Peut être devrais-je aussi remplacer

Mon application chargera automatiquement les données de la base puis devra les binder dynamiquement sur le template.
Celui-ci pourra évoluer indépendamment dans le temps, les noms des balises peuvent changer, etc...

Pour l'import, mon programme devra se baser sur le même template de définition afin de réhydrater mon modèle pour que je puisse l'insérer en base.
Je recevrai alors un fichier remplis comme celui-ci :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?xml version="1.0" encoding="iso-8859-1" ?>
      <Posts>
    		<post id="1">                                                                     
    			<Author>John</Author>  
			<Title>Un nouveau post</Title>                                     
    			<Comments >
    			   <comment id="1">10/01/2012 - Samuel - C'est un post intéressant!</comment>
    			   <comment id="2">18/01/2012 - Nico - Merci! Continuez comme ça</comment>
			   ...
    			</Comments>
	        </post>
		...
      </Posts>
A ce niveau de la réflexion, je souhaiterais savoir ce que vous en pensez :
- Existe-il déjà à votre connaissance un mécanisme ou une librairie qui effectue un type de tâche similaire ?
- Je ne sais pas encore comment m'y prendre pour effectuer le binding et plus encore comment recharger mon modèle d'après les données du fichier, auriez-vous des pistes/pattern? (En fait je me disais que j'allais essayez de comprendre les mécanismes du binding bidirectionel wpf pour m'en inspirer mais je ne sais pas quels sont les mécanismes sous-jacents)

Merci pour toute aide sur le sujet.