小程序的功能不断增加,但是老版本的微信客户端不支持新功能,所以在使用这些新功能的时候需要兼容.关于单个API如何兼容,微信官方提供了兼容文档,这里不再赘述。下面主要讨论如何在整个项目中优雅地处理兼容性问题。问题如果在每个需要兼容的地方都写一堆兼容相关的代码,随着代码量的增加,会出现以下问题:代码难以阅读。当兼容方案改变时,你需要改变很多地方。久而久之,你的代码是最需要的,也是最难兼容的。理想的情况是不需要做兼容处理,所以兼容处理可以推导出来的代码不属于代码的正常处理过程。基于此:兼容的细节不需要暴露解决方案要统一,兼容的方案可以很容易的改变。1.隐藏兼容方案,对外提供接口。比如wx.showLoading是1.1.0版本之后才提供的,需要兼容之前的版本。我们选择放在show-loading.js中,内部处理兼容性,外部提供showLoading方法。这样调用者只需要调用showLoading方法即可,无需考虑兼容性问题,如果兼容性方法发生变化,只需要更改show-loading.js中一处即可。2.兼容处理有共性,可以抽象。经过更多的兼容处理,我们会发现兼容性的处理无非是两个方面:支持方法时,直接使用对应的方法。当不支持该方法时,做一些兼容处理。因此,这个我们可以把这个模式再次抽离出来,这当然有一些好处:减少重复代码,做一些通用的处理,我们只需要改一个地方(比如不兼容官方API的时候,添加相应的统计来分析当前Application跨版本的情况)比如我们抽取这么一个简单的compatible.js来处理兼容性的常见问题:之前的showLoading.js我们可以这样写:简单:),这种方式写的意思是compatibility正常显示loading就可以了,不兼容就不显示了。当然,可能有完美主义者会想“我怎么可以不显示呢?我就是要显示!”那么我们可以这样写:用wx.showToast伪造一个showLoading。3.可能文件越来越多文件组织兼容性。对于我这种收拾东西的人来说,看到东西散落在一个抽屉里肯定是受不了的……所以我们可以多用几个盒子分类收拾。如何选择小盒子?其实官方已经给出了答案。官方的API是按照不同的功能进行分组的,所以我们可以把分组当作一个“盒子”来使用。最终的文件组织如下所示:
