php程序如何向前兼容,如何正确解决软件产品的“向前”及“向后”兼容问题?...

一个软件产品的客户端版本升级之后,数据库的结构变化了,用户存储在老数据库中的数据会被丢弃吗?为了避免这种情况发生,一般在升级应用客户端的同时,我们需要把旧版本的数据库导入新数据库中。这是一种常见的向后兼容操作。先区分两个特别容易被混淆的概念:向后兼容和向前兼容。

c855698aa641cd0f09ea1f69d461d306.png

向后兼容指的是对已经发出去的老版本兼容,向前兼容指的是对还没有做好的版本兼容。显然,向未来兼容难上加难,理论上也是做不到的,因为我们永远不知道未来要做什么功能或需求。但向后兼容是一定能够做到的,程序员都可以面对老版本分析出当前的状态和兼容的办法。

那我们就介绍一下向后兼容数据库的处理方法。

0681222b85efe5a31269a32ca8745b61.png

版本升级大概面临几种情况:数据库增加字段、删除字段、修改字段等,其实都可以抽象为一类问题——如何在版本升级时重新整理数据库。版本升级时,免不了要做导入和导出,以新增字段举例,大概流程如下:(1)建立新数据表;

(2)查询旧表数据,并插入新表中。

(3)启用新数据表。

(4)删除旧数据表。

过程比较简单,因为版本升级,可能面临着程序首次启动会比较耗时的问题,这就涉及如何提升导入和导出的效率。同时,这种耗时过程需要在产品上设计交互来遮挡,跟用户数据丢失比较起来,这种产品交互上的设计是很廉价和值得付出的。例如,有时我们更新了手机QQ,首次启动的时候会有升级数据库的loading界面。

067520882d16482e01767d12aeaa4dc4.png

还有一点值得注意:为了避免频繁升级数据库所造成的一些兼容性问题,我们设计数据库的时候,有必要预留几个扩展字段来应急,比如声明为extra1、extra2、extra3。这里的设计也有一点向前兼容的思想。如果有程序员对你说无法兼容老版本,那他一定是想偷懒。

总言之面相未来的向后兼容是一定要做的,而且一定是需要有解决方案的。向前兼容是可以适度做的,但一定不能实现长期兼容的。互联网产品经理尤其要明白后者这个道理:不是想兼容未来就能兼容的,这需要付出巨大的开发成本,有时还会令问题复杂化难以有效推进产品的开发进度。

小编见过很多为未来过早地做设计和规划而失败的例子,建议大家只做当前够用的设计,做实用主义者。一种好的工作方法,应该是不去规划系统或方法,先用最简单的方式完成第一个试水或落地场景。当用同样的方法做完第二个场景后,就能抽象出一个规则或流程来做这件事,做完第三个场景后,就可以规划出一整套系统专心做这件事。通过这样的过程形成的系统,运行时往往会更加高效和稳健。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值