基於web/h5應用的外掛/擴充套件/業務剝離方案設計
基於web/h5應用的外掛/擴充套件方案設計
本文是一個系列文章,談談如何降低應用的複雜度,增加可維護性。
文章裡面提供的是一種思路,並根據此思路進行實現,將遇到的問題進行解決。
背景
隨著使用者體量的增加,功能會越來越多,系統會越來越龐大,基於後端的微服務越來越大火,前端層面更多的關注vue,react之類的框架上,
他們解決的是檢視和資料的分離,但業務層面的框架或者思想的分享則不多,畢竟偏離了技術的路線。
思想
類似與微信與小程式,瀏覽器與擴充套件,或者作業系統與應用程式之間的關係,都是面向開發者的服務(如果客戶沒有開發能力,也可以根據情況由我方開發者開發)
實現
根據我們自身業務系統的特性,找到我們系統本身獨特的,核心的業務性的東西,以此為主線,將各個業務模組或者通用服務抽離。
上面講的有些抽象,讓我們來舉幾個具體的例子。
假如我們的系統是iconfont.cn
需求: 我的職業是寫PPT,每天會高頻詞找圖示放入PPT,它只有複製svg的功能,沒有直接複製圖片的功能,我不想每次都下載PNG,
我期望有個複製圖片的功能,類似於下圖
程式碼方案設計,以下為虛擬碼,實際生產環境不會這樣寫,但這不重要,在此,只是提供一種思路給大家。
- 基礎功能裡將按鈕設計成一個陣列
- 我們初始化會獲取當前使用者的擴充套件並執行(利用
new Function()
,後續文章我會詳細說明如何設計) - 動態擴充套件獲取到btnGroup,並追加進一個按鈕。(這裡的難點是如何獲取btnGroup,我們不可能將btnGroup設定為全域性變數,這樣不符合我們的初衷,這裡需要我們在設計之初就想好,框架不同,方案不同,後續的文章,我會針對ES5,ES6,Vue等出針對性的寫法方案)
我們打包後的部分程式碼片段如下
//我們系統的基礎功能
const btnGroup=[{
name:"SAG 下載",
fn(){}
}];
通過介面獲取到的程式碼片段(此程式碼片段由使用者或管理員上傳至我方資料庫,並經過介面返回至客戶端)
//動態擴充套件,使用者自己上傳或者我們分配的擴充套件
btnGroup.push({
name:"複製 PNG",
fn(){/*具體的實現*/}
})
結束,完成一個簡單的功能。
優點
- 功能獨立出去了,系統的程式碼量會變小很對,我們對系統減負,開發員將關注點放在基礎功能上,而不是這種定製功能。
- 系統架構清晰,維護起來就容易。
- 需求的響應速度加快,一個功能從提出到使用者實際得到,如果使用者自己有開發能力,時間等於他自己的開發時間,如果使用者沒有開發能力,時間等於傳達耗時+我方開發員的開發時間。
- 翻車也不怕,如果功能有問題,第一,它隻影響使用它的使用者,第二,使用者或者管理員後臺直接設定為無效,即可完美脫離擴充套件,不影響其他功能,待改進後啟用即可。
- 不但可以加功能,還可以打補丁,如漏洞,bug等,完美避開版本控制,領導的最愛。
- 其他的一些好處-_-…
缺點
- 基礎程式碼需要留出一些鉤子,以便擴充套件在合適的時機去執行特定的功能。
- 因擴充套件是直接執行在瀏覽器上,es6架構下,程式碼壓縮後,擴充套件執行需要開發員對webpack和babel的一些打包策略及原理比較熟悉。
- 擴充套件變多,會不會相互影響,以及更改基礎功能後,受影響的擴充套件如何解決,有待一套完美的方案。
- 千人千面系統管理起來不知道費勁不,許可權控制可能有點麻煩。
總結
好處肯定大於壞處,誰用誰知道,我經過實測,效果極佳。
結束語:歡迎在評論區交流,如果覺得不錯,可以點贊和收藏,持續更新。
下一篇
等待更新
相關文章
- 那些離不開的 Chrome 擴充套件外掛Chrome套件
- [外掛擴充套件]計劃任務外掛套件
- [外掛擴充套件]百度統計外掛套件
- jQuery擴充套件外掛jQuery套件
- jQuery外掛擴充套件jQuery套件
- [外掛擴充套件]更新IP外掛套件
- [外掛擴充套件]廣告外掛2.0套件
- [外掛擴充套件]附件Attachment外掛套件
- [外掛擴充套件]Ping外掛套件
- [外掛擴充套件]投票外掛1.0套件
- [外掛擴充套件]騰訊分析外掛套件
- [外掛擴充套件]外掛需求徵集套件
- [外掛擴充套件]基於PHPMailer開發的一個判斷失誤的外掛....套件PHPAI
- [外掛擴充套件]焦點圖外掛套件
- [外掛擴充套件]友情連結——外掛套件
- [外掛擴充套件]qq登入外掛套件
- [外掛擴充套件]修改密碼外掛套件密碼
- [外掛擴充套件]留言版外掛套件
- [外掛擴充套件]單頁管理外掛套件
- [外掛擴充套件]邀請碼外掛套件
- [外掛擴充套件]jQueryFileUpload套件jQuery
- 外掛擴充套件需求_好友套件
- iOS 通知擴充套件外掛iOS套件
- [外掛擴充套件]通用網站統計套件網站
- [外掛擴充套件]【小白練手】 51啦統計外掛套件
- [外掛擴充套件]百度分享外掛套件
- [外掛擴充套件]微信外掛Wechat1.0套件
- [外掛擴充套件]三級聯動外掛!!!!!!!!套件
- [外掛擴充套件]APP極光推送外掛!套件APP
- [外掛擴充套件]防護雲Iswaf外掛套件
- [外掛擴充套件]返回頂部ReturnTop外掛套件
- [外掛擴充套件]廣告圖片漂浮外掛套件
- [外掛擴充套件]圖片輪播外掛套件
- [外掛擴充套件]js版本分頁外掛套件JS
- [外掛擴充套件]跪求時間軸外掛套件
- Rainbond外掛擴充套件:基於Mysql-Exporter監控MysqlAI套件MySqlExport
- [外掛擴充套件]簡單的IP記錄外掛套件
- [外掛擴充套件]圖片牆套件