中後臺系統提升質量和效率的一個思路

背景

中後臺項目中會存在一些配置頁面需求的開發,這些需求高度相似,迭代頻率低,基本結構爲「搜索區域」、「表格區域」、「包含表單的彈窗」三部分組成。

其中「搜索區域」和「表格區域」的操作區交互固化,比如查詢、添加、查看、刪除、上線、下線。

當前開發時大都採用複製類似需求頁面繼而修改的方式,如下圖所示。每個人都形成了自己的代碼組織結構,導致雖屬同一團隊,但代碼風格、交互實現邏輯變爲了多條平行線。

這種迭代方式存在兩點壞處:

a. 重複勞動較多,同時存在漏改的風險。易變的地方分佈在頁面中各個部分,修改起來不夠方便,改動後存在影響到正常邏輯的風險。

b. 團隊內各自抽離的不同交互方式,接手他人頁面的時候需要耗費一定的理解成本,同時 code review 時無法快速的理清邏輯。

解決方案

中後臺項目提效一個直接的想法就是低代碼的思路:

a. 初態:抽離各個組件,定義 json 的格式,通過 json 渲染出頁面。

b. 終態:開發搭建平臺,通過拖拽生成 json 並且實時預覽頁面,開發者也可以通過預定的協議接入自己的組件。

上述兩種方案除去搭建成本大之外,最大的問題就是業務開發靈活性將大大降低。

開發者將在新的規範下進行開發,不管是通過 json 配置還是配置平臺生成頁面,上手難度大大增加,不亞於去學習一個新的前端框架。如果新需求的交互框架沒有考慮到,將花費大量的時間進行適配, 甚至超過了從零開發需求的時間。極端情況下,如果無法滿足需求的交互,還存在推倒重來的風險。

基於以上考慮,我們採取一個更輕便的方案,以模版代碼爲基礎進行後續開發,並通過腳手架進行模版的配置、拉取。

如上圖,大家的開發流程從之前的平行線變爲了網狀,未來的頁面的目錄格式和交互方式都會統一。

由於是生成的模版代碼頁面而且不強依賴於模版,未來需求有大的變化也可以正常迭代。

方案設計

  1. 模板設計

考慮到今後有可能增加其他場景模版,設計模版要考慮到未來可以進行無縫擴展,有兩種方案:

a. 按分支來保存不同場景下的模版:

優點:不同場景下通過分支來拉取不同模版,模版之間完全隔離。

缺點:缺少了 master 分支,各模版都需要自己的 master 分支進行迭代。分支之間差異較大,完全違背了 git 的迭代初心。

b. 按文件夾來保存不同場景下的模版:

優點:所有模版都存在於 master 分支,和普通項目的方式一樣從 master 切出分支進行迭代。

缺點:腳手架需要一次性拉取所有模版,然後複製自己需要的模版。

考慮到拉取文件速度較快,最終選取了方案 b

各個配置頁面之間雖然相似,但也會因實際情況存在細微差異,所以模版不能完全寫死,需要支持動態編譯,這裏採用 EJS 進行編譯。

EJS 是一套簡單的模板語言,它沒有再造一套迭代和控制流語法,只需正常的 JavaScript 語法即可實現一些條件編譯、變量替換等,因此可以快速上手。

關於模版內容,核心思想是將變化與不變的內容進行抽離

我們可以將後端的接口、權限的配置、搜索框的配置、常量抽離出配置文件,將表格、搜索框、表單之間的聯動方式預先寫好,目錄格式如下。

開發者只需進行後端接口的配置、搜索框的配置、表單的開發即可快速完成整個需求。

  1. 架構設計

考慮到一方面腳手架整體架構和功能實現後迭代頻率會逐漸降低,另一方面更新腳手架需要走 npm 包的發佈流程,如果將模版內容耦合到腳手架中,每次更新都重新進行發包較爲繁瑣。

因此將模版單獨放一個倉庫,從腳手架中解耦出來,實現腳手架倉庫和模版倉庫分離,獨立迭代,降低更新成本。

使用者通過輸入命令和參數即可生成模版頁面代碼,腳手架內部實現拉取模版和編譯,生成最終頁面,架構如下:

  1. 腳手架實現

提供 ce-cli 命令,結合用戶的參數進行進行模版的編譯生成,同時提供交互式的形式選擇參數,降低使用者的上手難度,交互形式如下:

考慮到模版和腳手架存在強綁定關係,即如果模版更新了,但腳手架沒有更新會造成一些模版邏輯未被編譯的情況。因此執行命令時需要檢查腳手架是否爲最新版本,如果版本較低必須強制升級,中斷程序的執行。(對於團隊內部工具來說,始終保持最新版本纔可以及時用到最新功能,這也是強制升級的原因之一)

爲提高命令的執行速度,執行命令時將拉取的模版緩存到本地,並且將最新的 commit 名保存起來。第二次執行命令的時候將目前最新的 commit 和此前保存的 commit 進行比對,如果不相等則覆蓋原來的模版,否則使用原來的模版即可,減少一次網絡請求耗時。

總結

經過一段時間的迭代,後續有近 20 個頁面用到腳手架,每需求可降低 0.5pd 的時間,更重要的是團隊內相關需求的代碼結構、交互實現均已統一,提升了代碼質量 和 code review 的效率,團隊間交替開發需求時的代碼認知難度將大大降低。

code review 過程中,團隊內提供相關建議,沉澱最佳實踐,例如默認對象通過函數返回、公共方法的使用、項目框架一些特有操作都內置到模版中,不斷提升代碼質量,磨平大家之間的認知差異。

未來有新同學加入,可以在模版的基礎上更快的進入開發,極大的降低對系統框架一些特有操作的認知時間,同時保證代碼質量。

腳手架中的模版對主要對錶格和搜索區域固化了代碼邏輯,對於表單的使用我們還是通過原始的 element 表單進行開發,一些常用的規則校驗、表單的邏輯每次都需要重複進行開發,經過調研目前公司內已經有多種封裝好的表單,未來可以進行詳細瞭解,最終引進到模版代碼中,進一步提升開發效率。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/1bFwqpWleoPnOFzEZPrhZA