2010-09-11 9 views
3

Je développe une application C# où la majorité de la base de code est dans les bibliothèques de classes C#. Je souhaite que l'application prenne en charge la sauvegarde et le chargement des fichiers de projet basés sur XML et puisse déterminer si des modifications ont eu lieu depuis la dernière sauvegarde.Modèle de conception pour les fichiers de projet XML en C#

Mon idée actuelle est de conception:

  1. Chaque classe qui doit stocker les paramètres implémente IXmlSerializable. L'application maintient une liste générique d'objets de paramètres IXmlSerializable et appelle ReadXml et WriteXml pour sauvegarder/charger les fichiers du projet.

  2. Chaque classe qui stocke les paramètres conserve également un indicateur modifié.

  3. L'application peut vérifier si le projet a été modifié par la liste générique énumérant des objets IXmlSerializable et vérifier le drapeau modifié sur chaque. Il peut également effacer le drapeau modifié sur chaque sauvegarde après.

Est-ce un bon design? Y en a-t-il de meilleurs? Peut-être que j'ai aussi besoin de dériver ma propre interface de IXmlSerializable pour ajouter le drapeau modifié?

merci, Andy

+0

Notez qu'il est possible que je puisse utiliser autre chose que XML, mais je pense que mon modèle de base resterait le même. Créez une interface avec une fonction de lecture, une fonction d'écriture et un indicateur modifié, puis utilisez une liste générique de ces objets. – Andy

Répondre

2

Je pense que le concept que vous allez pour son est. Je n'ai qu'une préoccupation et c'est peut-être moi qui lirais beaucoup dans votre formulation.

Il semble que vous n'ayez pas à exécuter la méthode WriteXml si l'indicateur modifié d'instance n'est pas défini. Si j'ai bien compris, ce que je pense que vous trouverez est que le fichier résultant ne contiendra pas les paramètres non modifiés. XmlSerialization est un tout ou rien, il ne peut pas mettre à jour certaines parties du fichier. Donc je pense que votre drapeau est utile pour déterminer si vous avez besoin d'enregistrer ou non, mais si vous déterminez que vous devez sauvegarder les données, vous devez sauvegarder la structure entière. Dans ce cas, il n'est pas nécessaire d'implémenter IXmlSerializable sur chaque classe sauf si vous avez des exigences de sérialisation personnalisées qui ne peuvent pas être traitées autrement.

+0

C'est si vous sérialiser l'ensemble de l'arbre d'objets à la fois, non? –

+0

Oui, mon intention est de OU les drapeaux modifiés ensemble et ensuite déterminer si le projet dans son intégralité doit être enregistré ou non. Merci de le signaler. – Andy

+0

@Caspar, c'est correct. Je suppose (espérons?) La sérialisation est tout à un seul fichier XML. Écrire des parties du graphique individuellement signifierait que plusieurs XmlSerializers sont utilisés, un de chaque type de racine à écrire, ce qui aboutirait à un document XML non bien formé. Sauf s'il y a un truc qui me manque ici. –