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
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 .
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.
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.
- 1. Bonne façon de gérer AssociatedControlID manquant
- 2. Une bonne façon d'expédier/gérer le message dans actionscript 3?
- 3. Bonne façon de gérer de nombreux fichiers différents?
- 4. Quelle est la bonne façon de gérer xml-stylesheet: xmlns: blah avec haml?
- 5. Quelle est la bonne façon de gérer les extensions d'image?
- 6. Quelle est la bonne façon de gérer plusieurs redirections automatiques?
- 7. Bonne façon de gérer les exceptions d'exécution en Java
- 8. La meilleure façon de gérer un changement dans 'ceci'
- 9. Quelle est la bonne façon de gérer la version d'assemblage?
- 10. La bonne façon de gérer la fermeture popup
- 11. Quelle est une bonne façon de lire ce XML?
- 12. la bonne façon de créer un XML comme ceci:
- 13. Bonne façon de coder
- 14. Quelle est la bonne façon de gérer le cycle de vie de l'activité avec OpenGL
- 15. Changement de curseur gérer l'image
- 16. Bonne façon de naviguer dans le DOM
- 17. Bonne façon/La meilleure façon de gérer "CoreData ne peut pas remplir une faute pour" exception
- 18. Bonne façon de gérer le formulaire d'édition en ligne en utilisant Rails et jQuery
- 19. Meilleure façon de gérer le dépôt git
- 20. Bonne façon de lire le nœud XML via jQuery? avec une boucle limitée!
- 21. Quelle est la bonne façon de gérer la pagination de données pour UX et SEO?
- 22. Quelle est une bonne façon de gérer les messages d'erreur et de succès et les codes?
- 23. Bonne façon de développer une grande application
- 24. changement d'espace de noms xml
- 25. Quelle est la bonne façon de gérer la fermeture d'une applet Java?
- 26. La bonne façon de gérer les données utilisateur supplémentaires dans Django?
- 27. Quelle est la bonne façon de gérer une version avec SVN?
- 28. Meilleure façon de gérer la représentation légère (squelette) dans le schéma XML du service Web?
- 29. Quelle est la bonne façon de gérer les dates UTC en utilisant Java, iBatis et Oracle?
- 30. Quelle est la bonne façon de gérer les "types" dans Rails?
Excellente idée sur le stockage du numéro de version. – monO