我有保存文件(认为word文档)的基于XML的格式的应用 - 从XSD文件生成目前C#类用于读取/写入的文件格式,一切都很好,直到最近,当我不得不做出改变的格式文档。 我关心的是向后兼容性为我的应用程序的未来版本需要能够读取所有以前的版本保存的文件,最好我也希望老版本的我的应用程序能够正常处理读通过我的应用程序的未来版本中保存的文档。
例如,假设我改变我的文档的架构到某个位置添加(可选)额外的元素,那么旧版本我的应用程序将简单地忽略额外elemnt会有任何问题:
<doc>
<!-- Existing document -->
<myElement>Hello World!</myElement>
</doc>
但是,如果一个重大更改是由(属性变为例如一个元素,或元素的集合),那么过去我的应用程序的版本应该要么忽略这个元素,如果它是可选的,或者告知他们正试图给用户读取保存,否则我的应用程序的新版本的文件。 也这是目前导致我的头痛为我的应用程序的所有未来版本需要需要读取两个不同的文件完全独立的代码。
这种变化的一个例子是下面的XML:
<doc>
<!-- Existing document -->
<someElement contents="12" />
</doc>
更改为:
<doc>
<!-- Existing document -->
<someElement>
<contents>12</contents>
<contents>13</contents>
</someElement>
</doc>
为了防止支持头痛,今后我想拿出处理改变我可能会在未来一个体面的策略,让我释放现在要去我的应用程序的版本,以便能够应对这些变化的未来:
- 如果该文件的“版本号”存储在文档中,如果有的话是什么版本策略应使用? 如果文件版本匹配中的.exe程序集的版本,还是应该更复杂的策略来使用,(例如主要修订变化表明重大的变动,wheras次版本增量显示非破坏性变更 - 例如额外的可选元素)
- 我应该使用什么方法来读取文件本身,如何避免复制的代码,大量的不同版本的文件?
- 虽然XPath是显然最灵活的,它不是简单地生成与XSD类来实现更多的工作。
- 在如果DOM解析被使用,那么就需要在每一个重大更改源代码控制文档XSD的新副本,造成的问题,如果以往任何时候都需要应用到旧的架构(应用程序的旧版本仍然支持)修复另一方面。
另外,我已经工作了这一切非常松耦合的假设,我要让所有变更可以分成这两类“beaking变化”和“不间断的变化”,但我并不完全相信,这是一个安全的假设使。
请注意,我用的术语“文档”非常松散 - 内容不相似的文档了!
感谢您能给我任何意见。