小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容。

关于单个 API 如何兼容,微信官方提供了兼容文档,因此我们这里不再赘述。
下面主要讨论在整个项目如何优雅地处理兼容问题

问题

如果在每处需要兼容的地方都写上一堆兼容相关的代码,随着代码量增加,会出现以下问题:

  • 代码难以阅读
  • 兼容方案有变动时,需要改动多处
  • 随着时间推移,你的代码才是最需要并且是最难兼容的

思考

最理想的情况是不需要任何兼容处理,因此可以反推出兼容性处理的代码并不是代码正常流程中的一部分,基于此:

  • 兼容的细节不必暴露
  • 兼容的方案应该统一
  • 兼容的方案可方便地变动

解决方案

1.将兼容方案隐藏,对外提供接口即可

比如 wx.showLoading 是在 1.1.0 版本之后才提供的,对于之前的版本需要兼容。
我们选择将其放在 show-loading.js 中,内部进行兼容性相关处理,并对外提供 showLoading 方法。
这样调用者只需调用 showLoading 方法即可,不用考虑兼容性的问题,而且如果兼容的方式有变动,只需改动 show-loading.js 一处即可。

2.兼容的处理还有共性可以抽象

兼容处理多了之后我们会发现,对兼容所做的处理无非两方面:

  • 支持该方法时,直接使用对应方法
  • 不支持该方法时,做一些兼容处理

因此这种模式我们又可以抽离出来,这样做当然有一些好处:

  • 减少重复代码
  • 做一些共性的处理时,我们又只用改动一处(比如当不兼容官方 API 时加上对应统计,用于分析当前应用跨版本的情况)

比如我们抽离出这样一个简单的 compatible.js 用于处理兼容时的共性问题:

之前的 showLoading.js 我们可以这样写:

简单吧 :),这种写法的意思是兼容时正常展示 loading 即可,不兼容时则不展示。

当然可能有完美主义者会觉得『怎么能不展示呢?我就是要展示!』 那么我们可以这样写:

wx.showToast 伪造了一个 showLoading

3.文件组织

兼容性的文件可能会越来越多,对于我这种有收拾的人,看到所有东西散乱地扔在一个抽屉里肯定是不能忍的...
因此我们可以多用几个小盒子把它们分门别类地装起来。小盒子怎么选呢?其实官方已经给出了答案,官方 API 是按照不同的功用分组的,因此我们拿分组当『盒子』即可。
最终的文件组织像这样:

最新文章

  1. 5、ASP.NET MVC入门到精通——NHibernate代码映射
  2. 从客户端中检测到有潜在危险的Request.Form值的详细解决方案
  3. Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)
  4. PhoneCat App 教程
  5. Android Eclipse Errors
  6. (萌O(∩_∩)O)哈希知识点小结
  7. mongoDB2--mongoDB的下载和安装。
  8. BootstrapTable(附源码) Bootstrap结合BootstrapTable的使用,分为两种模试显示列表。
  9. tomcat运行war包报错,找不到context-root文件
  10. 认识 Java Message Service
  11. 在打开Dreamweaver软件情况下,vs2010 asp项目无法调试
  12. centos7 nginx安装/启动/进程状态/杀掉进程
  13. chrome插件的开发
  14. CentOS 7 使用OwnCloud建立私有云储存网盘
  15. webpack学习笔记(三)
  16. Linux基础命令---管理组gpasswd
  17. java的几个日志框架log4j、logback、common-logging
  18. Authentication failed (rejected by the remote node), please check the Erlang
  19. tensorflow笔记之反向传播时用到的几种方法
  20. JS日期、时间 格式化转换方法

热门文章

  1. Vscode 下 PlantUML 插件的安装(windows and ubuntu)
  2. Java类的三大特征
  3. linux 上安装 keepalive
  4. ByteCode Instrumentation
  5. A 小石的签到题
  6. mysql索引的面试题
  7. Qt 添加Includes、Libraries库
  8. iOS(Swift)学习笔记之SwiftyJSON的使用
  9. RDS的tar文件恢复到本地mysql5.7版本数据库
  10. Android开发之《USB Camera》