我们以XML格式存储对象。有时我们更新基础对象,然后我们必须在文件中保存更多数据以表示对象的额外属性。
如何组织/实施系统以确保向后兼容我们的旧版本文件?
复杂的部分是在同时查看多个版本时出现的。
Version 1 -> Version 2 -> Version 3 -> Version 4
我们是否应该编写四个文件读取器,每个文件版本一个,将其读入我们对象的当前最新版本?或者,我们是否应该保留版本1-3中所有类的旧版本,以便旧读者可以将数据读入这些类,然后使用增量更新程序更新1->2
然后2->3
然后是3->4
。
答案 0 :(得分:1)
当我增加这样的版本时,我通常保留旧阅读器,只需更新它以写入新模型。这意味着我只有我的其余代码的当前模型来处理,但我仍然可以读取旧文件。我会不保留旧类,无论你做出什么其他选择 - 你想要将你的代码中必须理解旧版本的地方数量本地化为尽可能少(最好是一个) 。如果您保留旧类,那么处理这些类的任何代码(即使是从公共基础派生的代码)都存在必须“了解”旧版本的风险,并且在一段时间后会产生一种无法解决的维护灾难。
这是 NOT 的万能药......所有明显的选择都有问题。一旦你有多个旧读者,更新它们就变得非常耗时(并且上帝禁止你将他们需要的一些代码重构到新的命名空间中,然后必须有效地编辑相同的代码100次以替换名称)。但是,我通常只是将它作为一个网关来完全摆脱旧版本 - 如果你决定只为了向后兼容而只有几个旧的版本阅读器,你可以在每次创建新版本时开始删除最旧的版本,使维护工作变得轻而易举。