【问题标题】:Object/XML Backwards-Compatibility对象/XML 向后兼容性
【发布时间】:2010-06-21 20:26:52
【问题描述】:
我们将对象存储在 XML 中。有时我们更新基础对象,然后我们必须在文件中保存更多数据来表示对象的额外属性。
如何组织/实施系统以确保向后兼容旧版本的文件?
同时查看多个版本时会出现复杂的部分。
Version 1 -> Version 2 -> Version 3 -> Version 4
我们是否应该编写四个文件阅读器,每个版本的文件一个以将其读入我们对象的当前最新版本?或者,我们是否应该保留版本 1-3 中所有旧版本的类,以便旧读者可以将数据读入这些类,然后让增量更新程序更新 1->2,然后是 2->3,然后是 @987654324 @。
【问题讨论】:
标签:
python
xml
backwards-compatibility
【解决方案1】:
当我像这样增加版本时,我通常会保留旧阅读器,然后更新它以写入新模型。这意味着我只有当前模型来处理其余代码,但我仍然可以读取旧文件。我不会保留旧类,无论您可能做出何种其他选择 - 您希望将代码中必须理解旧版本的位置数量本地化到尽可能少(最好是一个) .如果您保留旧类,那么处理这些类的任何代码(即使是从公共基础派生的)都存在必须“了解”旧版本的风险,并且会在一段时间后造成无法缓解的维护灾难。
这不是灵丹妙药...所有明显的选择都有问题。一旦你有超过几个老读者,更新它们就变得非常耗时(上帝禁止你将他们需要的一些代码重构到一个新的命名空间中,然后必须有效地编辑相同的代码 100 次以替换名称)。但是,我通常只是将其用作完全摆脱旧版本的网关-如果您决定只使用一些旧版本阅读器以实现向后兼容性,则可以在每次制作新阅读器时开始删除最旧的阅读器,使维护变得不那么令人头疼。