c++ - 如何组织版本化文件的导入和导出代码?

标签 c++ c versioning file-format

如果应用程序必须能够打开(并可能保存)最近 N 个版本的文件格式,那么应该如何合理地组织代码,以便更新文件格式既容易又不易出错?假设文件格式为 XML,函数接受导出对象并生成导入对象。

在每个函数名称的末尾附加一个数字,然后复制/粘贴它并为每个新版本递增该数字?这就像在源代码中维护多个版本的版本控制函数。也许在构建时做一些魔术?

最佳答案

首先,支持导入旧版本比导出要容易得多。这是因为通常以后的版本会有所不同,因为它们支持更多的功能。因此,保存为旧格式很可能意味着数据丢失。因此,我的经验只是支持多个版本的导入,跨越了十多年。

XML 当然是明智的解决方案。它的设计考虑到了这个问题。对我来说,关键点是干净的代码结构来自干净的数据模型。如果新版本添加了功能,并且这些功能通过对附加标签的支持来表示,您实际上根本不需要重新编码对现有标签的处理。

现在您可以更改现有标签的语义,需要重新编码。解决方案:如果可以避免,请不要这样做。添加属性或标记时,请确保定义默认值,然后无缝处理新旧数据文件。

所以在我看来,如果您小心谨慎,应该能够避免很多情况,在这些情况下,您确实有明显不同的代码来处理不同文件版本中的相同字段。如果确实发生这种情况,我猜想有“特殊情况”(这就是软件的生活)。当您设计通用解决方案时,您会想到特定的用例,并且无论如何都可能无法处理此类特殊情况。

总结:您将通过定义数据模型的升级路径最有效地适应 future 。

关于c++ - 如何组织版本化文件的导入和导出代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4951488/

相关文章:

c - 在二维数组末尾写入值

api - 当您可以实现版本控制时,为什么开发人员对发布 API 如此珍贵?

c++ - VC9下SQLite3的麻烦

c++ - Visual Studio 中 Lambda 的模板化变量错误?

c++ - C中的 float 问题

c - 如何在 C 中将行从矩阵传递到新数组

c++ - 有没有办法在没有事件循环的情况下编写 GUI?

c - 对于现代通用计算机,FLT_RADIX 在 C11 中不是 2 吗?

github - 如何使用 GitHub Actions 对构建工件进行版本控制?

versioning - 分布式架构中,为什么版本管理难?