根据我的经验,对向后/向前兼容性的承诺是软件工程行业的gilded cage。我特别注意到文档文件格式和编程语言/ API的情况。当他们现有的数据或代码中断时,客户和合作伙伴讨厌它;但是,如果你永远不会破坏兼容性,那么从长远来看,你可能会严重限制你的创新能力。
除了旧功能的逐步弃用之外,是否有解决此问题的方法?在Windows 7的XP Mode中,虚拟化似乎是一种令人兴奋的可能性。还有其他人吗?
此外,对于我们这些想要设计尽可能面向未来的新系统的人,我们可以从过去在行业中犯下的错误中吸取哪些教训?
答案 0 :(得分:5)
通过扩展而非重写公共API来创新。为后端功能提供一致的通用公共接口。只要您为公共API模块提供他们期望的结果,您就可以随时重写私有模块。
在后端进行改进,尽可能保持API的一致性。在扩展API的公共部分时创建新模块并将其清楚地记录下来,如果您提供新的更好的方法来完成旧方法的补充,旧方法的弃用将自然而然地发生。
对于文档格式,请始终包含版本号,并确保您有方法支持所有现有版本。与API一样,通过扩展而不是通过重写来添加新功能。
如果您希望对软件的整体架构进行根本性更改,请将新版本包含旧版本作为模块 - 这将导致更大的尺寸,但更好地支持旧数据和程序。
答案 1 :(得分:0)
使用XML作为文件格式的基础,并且只添加到规范DTD,不要删除。这样,您的文件应该向后兼容早期版本,这是一个加号。
答案 2 :(得分:0)
以下是一个很好的示例:使用SLF4J Bridges可以轻松地从Java中的一个日志记录模块迁移到另一个日志记录模块。