1. 程式人生 > >從0開始搭建低程式碼平臺系列(系統設計與規劃)

從0開始搭建低程式碼平臺系列(系統設計與規劃)

# 前言 什麼是低程式碼?低程式碼開發是種通過視覺化進行應用程式開發的方法,使具有不同經驗水平的開發人員可以通過圖形化的使用者介面,使用拖拽元件和模型驅動的邏輯來建立網頁和移動應用程式。這些工具通過減少手工編碼的工作量來幫助快速開發應用程式,提高開發效率。 這是從網上抄來的大概念,這裡我來談談我對低程式碼的看法,首先低程式碼有麼有存在的必要,答案是有的。 這裡方便分析就拿一個管理系統為例子,也許A公司需要一個管理系統,公司接下了,然後後面B公司也需一套類似的系統,公司有需要基於框架去定製,其實我們通過分析不難發現,A公司和B公司其實有重合需求的部分,而這部分我們是可以利用的,也就是通過低程式碼生成實現共用。 再來一次例子,活動運營頁面的開發,這類頁面生命週期短,而收益也不高,如果專門投入前端同學去做,會有些大材小用,這裡假如存在一個低程式碼平臺,這樣只需要運營小哥哥,小姐姐拖動一下滑鼠就能完成設計何樂而不為呢? # 技術選型 既然這是一個平臺那麼久涉及到了前端和後端,我們需要對前後端進行技術選型。 前端:react + typescript 後端:java 資料庫:mysql 沒啥特殊原因,因為我擅長寫react所以我就選了react + ts的組合。 # 平臺架構設計 一個平臺的設計好壞直接決定了這個平臺今後的可擴充套件性,所以在這一點來說需要慎重考慮。 下圖是我的一個簡單的架構設計(有不同意見的小夥伴也可以在評論區點評) ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/02b555aad0b84690837ebdf740420333~tplv-k3u1fbpfcp-zoom-1.image) 首先整體的web作為輸出的一層獨立存在,然後就是核心部分Core的程式碼。 **關於Core** ServiceAPI為開發者暴露給使用者可二次開發的介面。 Service是整個CodeDesgin核心服務所在,所有的介面實現都在這一層。 Render層是分情況渲染的支援,主要是元件的多樣性導致我們無法通過一套程式碼去完成相容(或者說能做到相容,但是將無比的複雜) UIStore儲存,這裡其實要配合Service中的一個UIService進行使用,因為我們是個低程式碼平臺,不僅僅要保證程式碼能在網頁上展示出來,也要能儲存,能部署所以這裡我就設計了一個UIStore,大家可以把它看作**CodeDesign的資料層**吧,這個UI Store將會對使用者拖動產生的介面進行資料儲存,用來保證能夠在其他平臺進行還原。 **關於其他** Utils:CodeDesgin中用到的一些工具類的集合,這裡偷懶就沒有一一列出。 http request:網路請求庫,主要是在進行一些操作的時候,將資料送到後臺去 store:本地儲存,因為這裡初期不計劃實現實時更新到後臺,所以為了保證使用者的資料不丟失,這裡我在本地做了儲存操作,保證在一些特殊情況下能夠快速恢復使用者之前的操作。 # 資料結構設計 **設計程式碼如下** ```ts /** * 選單組 */ export interface MenuGroup { name: string; key: string; children: RenderMessage[]; } export interface RenderMessage { key: string; name: string; type: string; icon: string; dom: RenderDOM; } /** * DOM資料結構 */ export interface RenderDOM { domType: string; type: string; class?: string; value?: string; placeholder?: string; isDisabled?: boolean; size?: { rows?: number, cols?: number }; // 顯示行數,多行文字框需要 children?: RenderDOM[]; // 可能存在多層級巢狀(當然也可能是存在多個孩子節點) } ``` 因為設計是基於antd樣式庫實現,所以這裡通過分析發現antd在渲染最終元件的時候會通過三層div去渲染,這裡我們需要做的就是定義出這三層資料結構,讓我們的程式碼能夠生成。 核心在於RenderDOM的定義,這是渲染整個DOM結構的關鍵資料結構,他是一個樹形結構,而且是一個多叉樹,所以這裡在解析的時候,我們需要根據dom節點的層級和順序,按需載入。(暫定採用的是DFS演算法進行解析) # 最後 完成了上述的準備工作,我們心理已經對一個程式碼平臺的雛形有了初步規劃,下一步我們就可以開始開發啦。這裡補充下,因為本人是個直男,所一ui介面參考了ruoyi ui的設計,自己做了一些功能上的擴充套件。 # 程式碼地址 還在開發中~~~ https://github.com/guanjiangtao/code