微信小程序開發,如何優雅地兼容

小程序的功能不斷的增長,可是舊版本的微信客戶端並不支持新功能,因此在使用這些新能力的時候須要作兼容。

圖片描述

關於單個 API 如何兼容,微信官方提供了兼容文檔,所以咱們這裏再也不贅述。
下面主要討論在整個項目如何優雅地處理兼容問題html

問題

若是在每處須要兼容的地方都寫上一堆兼容相關的代碼,隨着代碼量增長,會出現如下問題:小程序

  • 代碼難以閱讀
  • 兼容方案有變更時,須要改動多處
  • 隨着時間推移,你的代碼纔是最須要而且是最難兼容的

思考

最理想的狀況是不須要任何兼容處理,所以能夠反推出兼容性處理的代碼並非代碼正常流程中的一部分,基於此:微信

  • 兼容的細節沒必要暴露
  • 兼容的方案應該統一
  • 兼容的方案可方便地變更

解決方案

1.將兼容方案隱藏,對外提供接口便可

好比 wx.showLoading 是在 1.1.0 版本以後才提供的,對於以前的版本須要兼容。
咱們選擇將其放在 show-loading.js 中,內部進行兼容性相關處理,並對外提供 showLoading 方法。
這樣調用者只需調用 showLoading 方法便可,不用考慮兼容性的問題,並且若是兼容的方式有變更,只需改動 show-loading.js 一處便可。spa

2.兼容的處理還有共性能夠抽象

兼容處理多了以後咱們會發現,對兼容所作的處理無非兩方面:code

  • 支持該方法時,直接使用對應方法
  • 不支持該方法時,作一些兼容處理

所以這種模式咱們又能夠抽離出來,這樣作固然有一些好處:htm

  • 減小重複代碼
  • 作一些共性的處理時,咱們又只用改動一處(好比當不兼容官方 API 時加上對應統計,用於分析當前應用跨版本的狀況)

好比咱們抽離出這樣一個簡單的 compatible.js 用於處理兼容時的共性問題:
圖片描述接口

以前的 showLoading.js 咱們能夠這樣寫:
圖片描述圖片

簡單吧 :),這種寫法的意思是兼容時正常展現 loading 便可,不兼容時則不展現。ip

固然可能有完美主義者會以爲『怎麼能不展現呢?我就是要展現!』 那麼咱們能夠這樣寫:
圖片描述文檔

wx.showToast 僞造了一個 showLoading

3.文件組織

兼容性的文件可能會愈來愈多,對於我這種有收拾的人,看到全部東西散亂地扔在一個抽屜裏確定是不能忍的...
所以咱們能夠多用幾個小盒子把它們分門別類地裝起來。小盒子怎麼選呢?其實官方已經給出了答案,官方 API 是按照不一樣的功用分組的,所以咱們拿分組當『盒子』便可。
最終的文件組織像這樣:
圖片描述

相關文章
相關標籤/搜索