2010-02-08 7 views
2

Notre système stocke les chaînes XML dans une base de données. J'ai récemment dû changer les propriétés sur une classe, et maintenant quand une chaîne XML est désérialisée, elle lèvera une exception. Quelle est la meilleure façon de gérer ce changement? Recherchez le nœud dans le code de l'application en utilisant XPATH ou LINQ, ou changez la chaîne xml dans la base de données SQL (c'est-à-dire faire une mise à jour de masse).Bonne façon de gérer le changement XML

Répondre

1

Vous pouvez envisager d'écrire un désérialiseur XML personnalisé (c'est-à-dire en implémentant IXmlSerializable, voir here) pour gérer les modifications de votre XML. Si vous avez investi beaucoup de temps dans l'élaboration de vos attributs de sérialisation XML, vous pouvez envisager une autre approche.

Envisagez de mettre à jour votre code XML ou de déprécier (au lieu de supprimer) les propriétés de vos classes et de mapper un comportement plus ancien sur un comportement plus récent. À plus long terme, vous souhaiterez trouver une stratégie pour gérer cela dans le futur, car vous continuerez probablement à apporter des modifications à vos définitions de schéma/d'objet lorsque vous ajoutez/modifiez les fonctionnalités de votre système .

0

Si vous sérialiser les objets à la base de données, vous pouvez essayer l'approche que j'ai décrite here pour charger les anciennes versions dans une nouvelle version, puis lorsque vous enregistrez la nouvelle version sera enregistrée. Vous ne savez pas si avoir des versions différentes de votre classe sera approprié si ...

Fondamentalement, vous créez une usine pour produire vos objets à partir du xml. chaque fois que vous changez d'objet, vous créez une nouvelle fabrique et une nouvelle classe d'objets, qui reçoit une version de l'ancienne classe dans son constructeur et qui se crée à partir de l'ancienne classe. La nouvelle usine essaye de créer un nouvel objet à partir du xml, si elle le peut, des jours heureux, si elle ne le peut pas, elle crée un nouvel objet et dit à l'usine la plus ancienne suivante de créer un objet plus ancien du xml. Ces usines peuvent ensuite être enchaînées afin que vous puissiez toujours charger une nouvelle version des objets à partir des données présentes dans la base de données.

Ceci suppose qu'il est possible de toujours créer un objet v2 valide à partir d'un objet v1.

0

Il est recommandé de stocker une version le long de vos chaînes XML. Soit au niveau de la base de données, soit au niveau de la classe, afin que votre code sache quelle version de la classe il doit désérialiser.

Vous pouvez également regarder XSLT. Cela vous permet de transformer une version de XML en une autre. Dans ce cas, la logique pour aller d'une version à l'autre n'est pas gérer par le code mais par le XSLT. Vous pouvez même stocker le XSLT dans la base de données, ce qui le rend réutilisable par d'autres programmes.

+0

Excellente idée sur le stockage du numéro de version. – monO

Questions connexes