如果应用程序必须能够打开(并可能保存)最后N个版本的文件格式,那么应该如何妥善组织代码,以便更新文件格式容易且不易出错?假设文件格式是XML格式,函数接受对象导出并生成要导入的对象。
在每个函数名的末尾附加一个数字,然后复制/粘贴它并为每个新版本增加数字?这就像在源代码中维护版本控制函数的多个版本一样。也许在建造时间做一些魔术?
答案 0 :(得分:3)
首先,支持导入旧版本比导出要容易得多。这是因为通常以后的版本不同,因为它们支持更多功能。因此,保存为旧格式可能意味着数据丢失。因此,我的经验只是支持多个版本的导入,跨越十年。
XML当然是智能解决方案。它的设计考虑到了这个问题。关键是我从干净的数据模型中得到干净的代码结构。如果新版本添加了功能,并且这些功能由对其他标签的支持表示,则您根本不需要重新编码现有标签的处理。
现在您可能更改现有代码的语义,需要重新编码。解决方案:如果可以避免,请不要这样做。添加属性或标记时,请确保定义默认值,然后无缝处理旧数据文件和新数据文件。
所以在我看来,你应该能够避免许多情况,在这些情况下你真的有不同的代码来处理不同文件版本中的相同字段。如果发生这种情况,我猜有“特殊情况”(这就是软件生活)。在设计通用解决方案时,您会考虑特定的用例,并且无论如何都可能无法处理此类特殊情况。
总结:通过定义数据模型的升级路径,您将获得最有效的未来证明。
答案 1 :(得分:1)
可能需要版本号。
但最好的是实际为XML设计。并确保XML以直观和自然的方式构建。否则,您的代码的当前组织可能会泄漏到XML的结构中,这使得XML很难在将来的产品版本中阅读。
保存枚举值时,请勿编写数字,而是写入可枚举的名称。如果某些元素原则上可能多次出现,但在当前应用程序中不会出现,请将其设计为XML格式的数组。确保您编写的数字位于问题域中合乎逻辑的单元中,而不是您的应用程序现在正在使用的单元。
在以这种方式编写的XML中,支持XML的旧版本应该不难。
修改强>
如果进行了大幅度的更改,那么实现一个读取旧版xml的旧数据对象会很有帮助。然后编写一个转换方法,将旧数据模型转换为新数据模型。这有助于您重新开始。如果旧的数据模型设计得很糟糕。