Architecture 遗留兼容性的最佳实践

Architecture 遗留兼容性的最佳实践,architecture,compatibility,legacy,Architecture,Compatibility,Legacy,根据我的经验,对向后/向前兼容性的承诺是软件工程行业的基本原则。我特别注意到文档文件格式和编程语言/API的情况。客户和合作伙伴不喜欢现有数据或代码中断;然而,如果你从不破坏兼容性,从长远来看,你会严重限制你的创新能力 除了逐渐弃用旧功能外,还有其他解决方案吗?看起来虚拟化,就像Windows7的XP模式一样,是一种令人兴奋的可能性。还有其他的吗 此外,对于我们这些希望设计出尽可能经得起未来考验的新系统的人来说,我们可以从行业过去犯下的错误中吸取哪些教训?使用XML作为文件格式的基础,只添加到规

根据我的经验,对向后/向前兼容性的承诺是软件工程行业的基本原则。我特别注意到文档文件格式和编程语言/API的情况。客户和合作伙伴不喜欢现有数据或代码中断;然而,如果你从不破坏兼容性,从长远来看,你会严重限制你的创新能力

除了逐渐弃用旧功能外,还有其他解决方案吗?看起来虚拟化,就像Windows7的XP模式一样,是一种令人兴奋的可能性。还有其他的吗


此外,对于我们这些希望设计出尽可能经得起未来考验的新系统的人来说,我们可以从行业过去犯下的错误中吸取哪些教训?

使用XML作为文件格式的基础,只添加到规范DTD中,而不删除。这样,您的文件应该与早期版本向后兼容,这是一个优点。

通过扩展而不是重写公共API进行创新。具有与后端功能一致的通用公共接口。只要向公共API模块提供它们期望的结果,就可以随时重写私有模块

在后端进行改进,并尽可能保持API的一致性。在扩展API的公共部分时,创建新的模块并清楚地记录它们。如果您提供了新的更好的方法来完成对旧方法的补充,那么旧方法的弃用就会自然而然地出现

对于文档格式,请始终包含版本号,并确保您有支持所有现有版本的方法。与API一样,通过扩展而不是重写来添加新功能


当您希望对软件的整体架构进行根本性的更改时,请将旧版本作为一个模块包含在新版本中—这将导致更大的规模,但更好地支持旧的数据和程序。

下面是一个很好的示例:在Java中,使用允许轻松地从一个日志模块迁移到另一个日志模块