前端數據層落地實踐

源寶導讀:天際移動平臺經過重構改版,近期正式發佈了1.0版本,我們在低代碼開發方面做了進一步增強。本文主要圍繞前端Model、前端業務邏輯(領域模型)、數據層與視圖層解耦(包裝器模式)3個方面,給大家分享一下統一數據層方案的設計思路和實現。

一、背景

    天際移動平臺經過重構改版,近期正式發佈了1.0版。在低代碼開發方面進一步增強,內置了移動應用常用的系統組件,並提煉了表單和列表兩大核心數據容器組件,使用了統一數據層解決方案。

    以移動應用常見的表單詳情頁面爲例,在移動平臺完成搭建到最終渲染,基本流程如下:

  1. 在平臺註冊獲取表單詳情數據的業務API,根據返回數據格式創建業務對象,業務對象包含業務字段。

  2. 拖拽表單容器到頁面中,綁定數據源到註冊的業務API。

  3. 拖拽表單組件,如文本框組件,綁定字段爲當前業務API返回業務對象的字段。

  4. 頁面渲染流程:

    1. 根據業務API返回的業務對象格式初始化前端Model。

    2. 表單容器調用領域服務獲取業務數據、填充Model、透傳表單組件。

    3. 表單組件根據綁定的業務字段動態解析Model數據進行渲染。

    本文主要圍繞前端Model、前端業務邏輯(領域模型)、數據層與視圖層解耦(包裝器模式)3個方面,分享下統一數據層方案的設計思路和實現。

二、 前端Model

    相較於後端Model,前端Model更像是一個容器,用於存放後端接口返回的數據,是前端數據層的最上游,也是接下來一切數據流動的起點。除了存儲接口返回的數據,一般前端維護一套Model還需要進行容錯處理,即運行時類型校驗,這對提高系統的健壯性有很大的幫助。

2.1、技術選型

    我們選用了mobx-state-tree(MST)實現數據層的Model,它是一種狀態容器。MST的中心是活躍樹的概念。每個樹都具有形狀(類型信息)和狀態(數據)。從這棵活樹上,會自動生成不可變的,結構共享的快照。

    類型的設計使得它在設計時和運行時都可以用來驗證類型正確性(設計時類型檢查僅在TypeScript中起作用)。

運行時類型錯誤:

設計時類型錯誤:

2.2、實現細節

    根據數據容器組件綁定的業務API接口返回的業務對象元數據,動態生成該數據容器的前端model,並存儲到數據Store。

    業務對象元數據示例:

動態生成前端model示例:

 

三、前端業務邏輯(領域模型)

    在我們之前的《領域驅動設計DDD在前端應用的探索》分享中,詳細說明了如何利用DDD分層架構,來實現前端業務邏輯解耦的理論性探索,簡單回顧下。

3.1、前端業務邏輯解耦-DDD設計思路

3.2、實現細節

領域實體:

領域服務:

 

四、數據層與視圖層解耦(包裝器模式)

    統一了數據層以後,組件只用來渲染數據,內部不用做數據相關的處理,更加輕量化。而數據層與組件渲染(視圖層)是通過包裝器模式進行解耦的。

    在主流前端框架(React或Vue)中的高階組件HOC,就是採用這種設計模式,移動平臺是基於Vue技術棧開發的。

4.1、我們封裝了一個渲染被包裝組件的方法 renderWrappedComponent

4.2、創建數據容器包裝器dataContainerWrapper

  • created階段初始化數據Model存儲在數據Store。

  • mounted階段請求業務數據並填充到前端Model。

  • render階段將前端Model數據傳遞給實際的組件進行渲染。

  • 包裝器與數據層數據是通過MobX進行關聯的,通過observer觀察數據變化,響應式更新包裝器。

4.3、在組件渲染時通過數據容器Connect,將組件與包裝器連接起來

五、總結

    當前主流的前端框架在數據層上是缺失的,本次實踐結合前端Model、前端領域模型、數據層與視圖層解耦等方面,形成了一個可落地的解決方案,這也是一個趨勢,感興趣的可以深入瞭解下。

------ END ------

作者簡介

陳同學: 開發SM,目前負責天際移動平臺的相關研發工作。

也許您還想看

移動建模平臺元數據存儲架構演進

AI雲店小程序演變之路

基於 Go 的微服務運行情況監控實踐

在明源雲客,一個全新的服務會經歷什麼?

雲客後臺優化的“前世今生”(一)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章