01 寫作背景
在低代碼平臺建設項目中,最核心最關鍵是對“應用”的理解和抽象。好比你要建設一個生產工廠,總得先把你要生產的產品設計好。但是在對應用理解和抽象時,產品團隊產生了一個很關鍵的分歧“低代碼應用是否需要強制劃分出前后端兩類服務”。一方的觀點是服務(服務是一個獨立部署單位,一個應用可以有多個服務組成)只要有“頁面、接口、邏輯、數據”這四類設計對象就可以了;另一方的觀點是不僅要有這四類對象,而且服務要劃分出前端和后端兩種類型。以下是個人對這個問題的一些思考和總結,歡迎點評和指正。
02 web應用兩種基本的解構方式
1、前端、后端
2、頁面、接口、邏輯、數據,(流程、認證與權限)
03 第一項建議:在設計層面低代碼應用不需要劃分出前后端兩類服務
1.從用戶的角度,要從目標客戶群的認知出發
-
低代碼平臺的最終目標客戶是是非專業程序員、非程序員,因此從降低目標用戶認知成本的角度考慮,不應該出現“前端服務”、“后端服務”這兩個實現層面的概念;
-
“頁面、接口、邏輯、數據,(流程、認證與權限)”更貼近非程序員對應用設計的直觀理解,可以降低用戶認知和學習難度。這對一個想覆蓋更多人群來贏得市場的低代碼產品來說至關重要。而且這種方式能夠實現“用戶理解和操作”、“應用設計和實現”在用戶認知的層面上保持一致。
2.從低代碼應用設計的角度,要真正理解應用設計和實現的差異
1)從設計DSL的目的說起
-
完整的抽象低代碼應用
-
保證應用抽象具有靈活可復用性
-
保證應用抽象有足夠的可擴展性
-
保證低代碼平臺本身架構穩定性
因此基于以上四點我們在可視化編輯器到交付物之間設計了一層DSL(由于應用本身橫跨多領域,因此低代碼DSL會有多項子DSL構成,比如流程由BPMN2.0協議表示、接口定義由swagger表示等等,不過這不是今天文章討論的重點,后面有空再單獨討論)。

2)DSL的核心功能主要是兩項:
-
把可視化設計轉變為DSL腳本(把抽象概念映射成dsl的結構和對象的能力)—>(應用設計)
-
把DSL腳本解釋(實現)成源碼、制品及部署(把dsl結構和對象解釋成GPL的能力)—>(應用實現)

3)兩個核心觀點(劃重點):
-
良好的DSL設計,在應用設計階段,支持用戶表達意圖的方式越簡單越好、對表達的約束越少越好。 按照這個原則,在低代碼的例子中,在應用設計階段,首先DSL腳本中只應該出現“頁面、接口、數據、邏輯,(流程、認證與權限)”等概念,不應該出現“前、后端服務”的概念,這對保證DSL腳本的簡潔性和確定性至關重要;其次,一旦出現前后端劃分,就會約束和限制用戶表達設計意圖的自由,比如“前端服務”不能操作數據庫、后端服務不能帶前端頁面就是非常典型的一種限制;再比如因為劃分了“前、后端服務“,為了滿足用戶一個界面編輯所有業務邏輯的目的,把所有“前、后端服務”都塞進了同一個編輯界面里,這也是一種限制,而且這種限制導致了交互復雜度和用戶使用難度的急劇增加。
-
在應用實現階段,可以通過提供不同的DSL解釋器,來提供不同的實現。(比如前后端一體化實現或者前后端分離實現)
換一個視角和思路:讓用戶區分前后端其實類似于讓用戶在為他所搭建的應用做“前端渲染”還是“服務端渲染”這樣的技術實現方案的選擇。首先,這種選擇對用戶實現業務功能來說沒有任何意義;其次,一旦把前后端概念暴露給用戶了,不僅用戶已經沒得選了,而且應用實現方式今后也難于做調整,這其實是一種比較糟糕的“設計、實現”分層策略。

3.在設計層面“頁面、接口、邏輯、數據”已經可以完整、自洽的描述一個服務
在設計層面“頁面、接口、邏輯、數據”的抽象已經可以完整、自洽的描述一個服務。在此基礎之上,強行引入前后端服務的分類,是一種過度的、重復的描述,而且帶來了不必要的約束。這種設計的根因是根植于程序員腦中的根深蒂固的前后端分離開發的思維。當然這跟我們低代碼產品的演進路徑也有一定的關系,后續我會單獨寫文章介紹。

4.“前、后端服務”劃分帶來的后遺癥后患無窮
前面提到過,因為設計階段區分了“前、后端服務”、前端服務不能操作數據庫、后端服務不能帶頁面的限制,為了滿足用戶在一個界面編輯所有業務邏輯的目的,把應用所有“服務”都塞進了同一個編輯界面里。這樣的設計帶來如下兩個問題:


我們的設計本來是該幫助客戶解決問題的,但是卻制造了麻煩。
04 第二項建議:在實現層面也不要劃分出前后端服務
-
一方面微服務思想普及導致api向原子化演進,另一方面產品由于用戶體驗多變需求,也希望前端承擔更多的接口組合、業務邏輯實現職責,以縮短開發響應用戶需求的路徑。這時候這就需要有地方去承載這些實現,如果都在應用前端實現,那當有多端或者多系統需求的時候,這些業務邏輯就需要重復實現,這對程序員來說是無法忍受的事情。這也是前端引入BFF的最根本最原始的原因。 -
前端請求性能優化的考慮。把多個網絡請求組合放在靠近微服務的BFF層實現,可以解決因存在多次串行請求所帶來的用戶體驗問題。
-
前后端徹底分離。前后端獨立開發更加方便:前端靈活性,即使有微服務遷移,也不影響前端。
-
此外,在實際實踐中,我們經常還會在BFF實現用戶認證和部分鑒權工作。
但是在低代碼應用中,我們引入了GraphQL做數據整合、且開放了可視化 schema 設計,前面兩點問題基本得到解決;另外我們本身就不希望用戶區分前后端,認證、鑒權也都可以頁面對應的后端服務中實現,因此后兩點本身也不是什么問題。
05 總結
-
低代碼目標客戶群體(非程序員用戶)不需要被動接受前后端服務的劃分 -
低代碼應用設計中應該體現設計抽象(頁面、接口、邏輯、數據),不應該體現實現邏輯(前后端)。
-
在低代碼應用實現中,不需要引入BFF做徹底前后端分離。
06 后記
- END -
未經允許不得轉載:RPA中國 | RPA全球生態 | 數字化勞動力 | RPA新聞 | 推動中國RPA生態發展 | 流 > 低代碼應用是否需要強制劃分出前后端兩類服務?
熱門信息
閱讀 (14728)
1 2023第三屆中國RPA+AI開發者大賽圓滿收官&獲獎名單公示閱讀 (13753)
2 《Market Insight:中國RPA市場發展洞察(2022)》報告正式發布 | RPA中國閱讀 (13055)
3 「RPA中國杯 · 第五屆RPA極客挑戰賽」成功舉辦及獲獎名單公示閱讀 (12964)
4 與科技共贏,與產業共進,第四屆ISIG中國產業智能大會成功召開閱讀 (11567)
5 《2022年中國流程挖掘行業研究報告》正式發布 | RPA中國