2010-06-21 77 views
1

我们用XML存储对象。有时我们更新基础对象,然后我们必须在我们的文件中保存更多数据来表示对象的额外属性。对象/ XML向后兼容

如何组织/实施一个系统,以确保向后兼容旧版本的文件?

一次查看多个版本时会出现复杂的部分。

Version 1 -> Version 2 -> Version 3 -> Version 4 

我们是否应该编写四个文件读取器,每个文件版本一个读入它的当前最新版本的对象?或者,我们是否应该保留版本1-3的所有旧版本,以便旧读者可以将数据读入这些类中,然后使用增量更新器更新1->2,然后2->3,然后,然后3->4

回答

1

当我像这样增加版本时,我通常会保留旧的阅读器,只是更新它来写入新模型。这意味着我只有当前模型处理剩余的代码,但我仍然可以读取旧文件。我会而不是不管你可能做出什么其他选择,都要保留旧的类。你想要将代码中必须了解旧版本的地方数量尽可能少(最好是一个)。如果你保留旧的类,那么任何处理这些类的代码(即使是从一个公共基础派生的代码)也会冒着必须“知道”旧版本的风险,并且会在一段时间后造成不可避免的维护灾难。

这是不是万能药...所有显而易见的选项都有问题。一旦你有超过几个老读者,更新它们变得非常耗时(并且上帝禁止你将他们需要的一些代码重构到新的命名空间中,然后必须有效地编辑相同的代码100次以替换名字)。但是,我通常只是将它用作完全摆脱旧版本的网关 - 如果您决心只为了向后兼容而闲置几个旧版本的阅读器,则可以在每次创建新版本时开始删除最早的版本,使维护大大减少头痛。