一分钟理解向后兼容

Posted 海枫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一分钟理解向后兼容相关的知识,希望对你有一定的参考价值。

什么是兼容

谈到兼容,少不了获得兼容收益的目标对象,以及提供兼容功能的组件这两个相互对应的概念。

如果一个目标对象,能否在同一组件的同个不同版本上协同工作,则移该组件的两个版本是兼容的,如下图所示:

兼容

兼容性分类

组件的两个版本是兼容的,那就会有新版本兼容旧版本,或者旧新版本兼容新版本这两个兼容方向

在旧版本上开发的目标,或者旧版本生成的数据,能够在新版本正确运行,或者正确处理,称为向后兼容

换句话说:向后兼容是指向历史兼容,如下图所示:

向后兼容

向前兼容却相好相反,在新版本上开发的目标,或者新版本上生成的数据,能够在旧新版本上运行,或者处理,则称为向前兼容

换句话说:向前兼容是指向未来兼容,如下图所示:

向前兼容

例解向后兼容

以软件为例子,说业界几个知名的向后兼容案例。

操作系统兼容应用程序

Ubuntu 16.04 向后兼容 Ubuntu 12.04

Ubuntu 16.04 兼容 Ubuntu 12.04

硬件兼容操作系统

Intel 64位处理器向后兼容32位处理器

Intel 64位处理器 向后兼容32位处理器

软件兼容数据

Office 2010 向后兼容 Office 2003

Office 2010 向后兼容 Office 2003

更多的向后兼容例子,请访问维基百科Backward compatibility词条中的案例

实现向后兼容有什么魔法

说个大实话,提供兼容性本身就是一种负担,它会制约着产品的设计。但在很多情况下,如果软件或者硬件不提供兼容性,客户是无法为你的产品买单的。

如何设计一个产品才能满足向后兼容呢,它的秘诀就是只新增接口,对现有接口不能做任何修改,同时可感知到的默认行为都要保持不变。

这约束太强了吧,在软件只新增接口或功能同时,怎么也会对现有的接口做修改吧?

如果真的需要修改接口,也请不要修改原来的接口,而是采用下面两种策略:

  1. 开发一个新接口,上层新版本软件请使用新接口;没有重编修改源代码和编译的老软件仍然使用老接口
  2. 保留原有接口,开发一个同名的新接口,但接口版本号不同(Linux下的glibc就采用了版本机制实现应后兼容能力)

如果提供兼容性的组件的各个接口是相对独立的,比如Linux下的glibc运行库,实现向后兼容相对比较容易。但是如果组件对外提供的接口非常内聚,提供两个版本接口实现,是很难维护的。

小结

后向兼容是指向历史版本兼容,新版本完全兼容旧版本的接口和功能。

以上是关于一分钟理解向后兼容的主要内容,如果未能解决你的问题,请参考以下文章

一分钟理解向后兼容

简单理解Gradle,Gradle是什么,一分钟入门Gradle

看了一分钟了解负载均衡的文章说说自己的理解

一分钟理解什么是REST和RESTful

cron表达式怎么实现“00:15-23:57每5分钟运行一次”?

一分钟理解softmax函数(超简单)