一.相关概念
    向后兼容(Backward compatibility,=向下兼容):“后”指“落后”,即旧的版本。指升级新版本程序后,能后导入旧版本程序的数据(个人设置、配置文件等)及支持原有通讯协议,并正常运行。
    向前兼容(forward compatibility,=向上兼容):“前”指“新”,即新(高级)的版本。应用程序的早期版本能够打开较新版本中的文件并忽略早期版本中未实现的功能。例如,Word 2003 向前兼容 Word 2007,因为它能够成功地使用转换器打开 Word 2007 文件。

    对于软件的兼容:
    向后:较高版本的程序能顺利处理较低版本程序的数据。
    向前:应用程序的早期版本能够打开较新版本中的文件并忽略早期版本中未实现的功能。例如,Word 2003 向前兼容 Word 2007,因为它能够成功地使用转换器打开 Word 2007 文件。
    涉及计算平台的兼容性:
    向下兼容:如基于Pentium微处理器的PC兼容机可以运行早期在486上运行的全部软件。向下兼容可以使用户在进行软件或硬件升级时,厂商不必为新设备或新平台从头开始编制应用程序,以前的程序在新的环境中任然有效,节省大量软件开发成本。即高版本平台可以运行在低版本平台上开发的程序。
    向上兼容:在计算机中指在较低档计算机上编写的程序,可以在同一系列的较高档计算机上运行,或者在某一平台的较低版本环境中编写的程序可以在较高版本的环境中运行,都称为向上兼容,前者是硬件兼容,而后者是软件兼容。例如,基于Intel386的PC兼容机上所有的软件也可以运行在486或更高的机型上。向上兼容具有非常重要的意义,一些大型软件的开发,工作量极大,如这些软件都能做到兼容,则无需在其它机器上重新开发,就可节省庞大的人力和物力。即在低版本平台上开发的程序可以在高版本平台上运行。

    本文主要写的是对程序的向下兼容性。考虑以下几种情况:
    情况1:新版本配置文件格式与旧版本文件不同:
    参考以下两种方案:
    (1)升级时,将旧版本格式数据转化为新版本格式。
    (2)新版本程序通过识别不同格式,同时支持2种格式的数据的处理。
    情况2:新版本与旧版本采用不同的通讯协议
    方案:一般需要新版本同时支持2种通讯协议的处理(比如新旧通讯协议、编码解码库的支持)。

    二.向下程序中数据存储方式及处理
    1.配置文件
    (1)旧版本中的配置文件在新版本中不存在。此种情况说明新版本可能已经不支持旧版本程序的某个功能,或对旧版本程序优化后不需要某些配置。该文件不需要导入到新版本中。
    (2)配置文件在新版本与旧版本都存在,格式没有变化。直接导入旧版本数据或直接使用旧版本的配置文件就可以了。
    (3)配置文件在新版本与旧版本都存在,新版本中增加了某些旧版本没有的字段。可读取旧版本配置文件中的所有数据,写入新版本配置文件。如果增加的字段不多,也可以直接使用旧版本配置文件,然后单独把新增加的字段写入。
    (4)配置文件在新版本与旧版本都存在,旧版本某些字段被删除了。说明新版本已经不会读取这些被删除的字段,可以不用导入。
    2.数据库
    在新版本中的数据库有新增或减少的数据库、表、字段,可参照对配置文件的处理进行类似操作。操作前应做好数据库备份。如果是旧数据库补充新曾的数据库、表及字段时,同时注意他们的属性,字段的类型是否设置的正确。
    当新版本程序在一个表中新增加了一个字段,此时旧版本数据库表中是没有这个字段的,这种情况需要在程序开发时单独考虑。 例如,有个存储压缩文件的表,表的字段包括文件的路径,文件名,文件大小,修改时间等等信息。在新版本程序中引入了一种新的压缩算法(保存的值是压缩方式1,压缩方式2等),增加了一个压缩格式的字段。此时旧版本数据库中是没有这个字段的。升级后,程序根据压缩格式的字段保存的压缩方式,进行解压。这时候对于原有数据需要指定一个值,表示旧文件是用某种格式压缩。如果某些情况在升级时不知道该为旧数据的新字段赋什么值,可以设定一个未知,然后在程序中对这种情况单独处理(比如依次尝试所有可用的解压方式来打开)。
    3.协议
    有时候生产环境中只能对部分程序进行升级,其余一部分服务器由于某些原因(比如该服务器上同时运行其他程序,升级后可能对其他程序有影响,升级风险大)不能升级,需要考虑新旧版本程序之间通讯是否正常。新版本程序与旧版本在一起工作时会产生的问题。

    三.开发程序时应考虑哪些兼容性方面的问题。
    1.考虑新版本程序是否需要和旧版本程序同时工作(多台服务器中部分只能升级部分服务器程序时)。
    2.对于新增的数据表、字段,如果与原有数据有关联时,是否需要特别处理。

    文章中记述的内容部分属于个人理解,如有问题或错误,欢迎指出和讨论。
    参考:https://blog.csdn.net/easytogogo/article/details/81156846
    ————————————————
    版权声明:本文为CSDN博主「weixin_41565133」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_41565133/article/details/94993006