Vular開發手記#1:設計並實現一個拼插式應用程式框架

来源:https://www.cnblogs.com/idlewater/archive/2020/05/11/12870380.html
-Advertisement-
Play Games

可視化編(rxeditor)輯告一段落,在知乎上發了一個問題,詢問前景,雖然看好的不多,但是關註度還是有的,目前為止積累了21w流量,因為這個事,開心了好長一段時間。這一個月的時間,主要在設計製作Vular,基於Vuetify跟larval實現的,可拼插式應用框架。並且把RXEditor可視化編輯也 ...


可視化編(rxeditor)輯告一段落,在知乎上發了一個問題,詢問前景,雖然看好的不多,但是關註度還是有的,目前為止積累了21w流量,因為這個事,開心了好長一段時間。
這一個月的時間,主要在設計製作Vular,基於Vuetify跟larval實現的,可拼插式應用框架。並且把RXEditor可視化編輯也整合進來了。
前端代碼地址:https://github.com/vularsoft/vular-admin
前端演示地址:https://vular.now.sh/ (尚未正式發佈,很多地方未優化,伺服器不在國內,載入會稍微有些慢,耐心等一下,一定能載入完)
框架已經具有雛形,頁面佈局(Schema)等都是從模擬介面載入的數據,並未寫死。
有過第一期Vular開發經驗(自己使用,並未正式發佈),本來以為第二期會開發速度很快,一兩周的時間應該能結束前端。結果一做就是一個月,並且很多細節還不完善。不得不說,工作量好大,工作量好大,工作量好大。
如果是小項目,不建議自己做一個類似的框架,工作量太大。如果是開發項目的公司,可以集中一個團隊的力量做一個,完成後,可以極大提高後續項目的開發效率。
本來就不是很喜歡多說話,結果還經常說廢話。閑話少扯,正式開始說項目,希望讀到這篇文章的朋友給個參考意見,幫忙看看這樣的設計有沒有什麼致命缺陷,在下不勝感激。

1、什麼是Vular?

基於vue,vuetify + laravel實現的拼插式應用框架,希望可以通過後端PHP代碼,像拼插積木一樣拼插自己的應用。
第一版已經打通了相關技術環節,以學習自用為目的,雖然Github上有代碼,並未正式發佈。第二版開源,希望實現一個高度可擴展框架,能夠在多個層面構建不同的生態(可能想多了,但是,沒有夢想的開源作者,跟一條鹹魚有什麼區別?野心要有的,萬一實現了呢)。

2、Vular框架結構

Vular採用前後端分離的方式,構成主要有兩部分:1、前端Vue部分,2、後端Laravel部分。通過大量預先製作前端控制項,減少後端程式員在前端的工作,通過後端框架的編程,拼插前端表現層。
簡單點說,就是少量後端代碼,不需要寫前端代碼,就可以製作應用。並且能夠同時享用Laravel跟Vue兩大生態。

2.1 前端Vue部分

前端框架實現用戶體驗方面的功能,比如風格樣式,美工配色,頁面佈局,頁面之間的遷移方式等。主要的框架固定後,頁面內部的元素是可以組合的,具體組合哪些元素,通過後端傳來的Json數據確定。
在第一期項目的實踐中發現,雖然可以在後端訂製很細小的控制項,比如“div”,“span”等。由於後端無法向前端傳遞JS代碼,這樣細的粒度,會使得前端更像一個大模板,無法充分使用js特性、發揮前後端分離的優勢。並且產生成後端程式員不易理解的代碼。
在第本期設計中,把前端的控制項設計的足夠大,給這些控制項配詳細文檔跟樣例,增加對後端程式員的友好性。

簡單點,就是前端框架提供足夠豐富的控制項:比如列表頁面,編輯頁面,級聯選擇,列表選擇等,供後端調用。後端不需要知道詳細前端html細節。

這樣的設計比起第一期,會失掉很多靈活性,但是增加了易用性。

前端展示層渲染分兩步:第一步,通過後端API獲取頁面的JSON描述,這個Json描述我稱它為Schema。前端根據這個Schema動態渲染頁面。第二步,根據Schema內的指示,通過後端API獲取頁面數據,這些數據我稱它為ViewModel。

2.2 後端Laravel部分

在設計這個項目前,參看了Nova跟Laravel Admin等一些優秀的框架,這些框架已經實現一些非常好的功能,為避免重覆實現, 我儘量提供一個不一樣的設計,來滿足不同的使用場景。
設計時,儘量讓前後端配合,形成MVVM模式。讓框架使用者,用儘量少的代碼,儘可能簡單的方式構造ViewModel跟View,從而騰出精力,專註於自己的業務邏輯。

前後端大致配合示意圖:

光憑這個醜醜的圖,可能收不明白詳細原理,先大致有個印象吧。

3、前端控制項

Vular是一個更靠近應用層的框架,前端一定要實現足夠多功能,才有存在的理由與價值。目前前端實現瞭如下控制項,可供後端調用。

3.1 導航菜單

本版本實現兩級導航菜單,以後可以升級更多級的導航菜單,目前沒有需求,為節省時間,只實現兩級:

上圖展示了所有菜單功能。菜單項結構:
前置圖標-菜單標題-後置圖標-Chip-Badge
扁平的“hot”,“new”部分是Chip, “8”跟“4”這樣的數字是Badge。
其中Chip是在構造頁面Schema時確定,不能通過數據實時更新。Badge展示的是前端框架中的全局變數,這些全局變數會在每一次跟後臺API交互時刷新,是可以實時更新的。只需要要在後端,綁定相應的Php function到全局變數即可。

菜單點擊會跳到相應頁面(Vue路由實現,不是Laravel路由,本項目儘量少使用Laravel路由功能),通過菜單項的to變數設置跳轉的目的頁面。

3.2 工具欄

工具欄比較簡單,只實現了通知跟一些簡單的賬戶操作,目前不支持工具欄插入自定義項目,後期有需求可以加。

3.3 媒體管理

一個集中管理圖片、視頻、文檔等文件的地方。目前只支持單級目錄,第一期支持樹狀多級目錄,使用過程中發現,需求並不高,本次取消多級。

可以用拖放的方式,調整文件夾的順序。可以用拖放的方式,把文件放到某個文件夾下。

預計實現一個可能會有爭議的功能,就是圖片置換。只選中一個圖片的時候,工具欄最右側顯示置換按鈕,可以把一個圖片置換成另一個圖片,圖片URL不變。具體應用,自行腦補一下好了。

3.4 媒體選擇

媒體選擇輸入控制項,可以從媒體庫單選或者多選媒體,可以拖放設置順序,如果是圖片還可以設置相應的alt文本:

3.5 列表頁面

列數,列寬,過濾條件,操作指令等都可以在後端PHP代碼中配置,數據的顯示形式如圖片,標簽等也可以在後端PHP代碼中配置。

3.6 編輯頁面

實現了兩種編輯頁面:


這個頁面的佈局(幾行,幾列)內容都可以在後臺的PHP代碼中訂製。

這個頁面的內容也可以在後臺的PHP代碼中訂製,卡片寬度可以訂製,控制項的佈局也可以訂製,卡片只有一個。

4、校驗

採用前端校驗跟後端校驗結合的方式,前端校驗採用vee validate,前端僅支持預定義校驗,不支持自定義校驗,後端校驗無限制。
後端代碼可以方便配置校驗規則:

VTextArea::make()
  ->field('summary')
  ->label('摘要')
  ->prependInnerIcon('insert_comment')
  ->maxLength(500)
  ->required()
  ->rule('email')

最後三行是添加校驗規則的代碼。

5、調試與錯誤提示


前端跟後端的通訊錯誤,用對話框方式提示,這些錯誤的詳細信息會被記錄,可以在Debug模塊查看。沒有錯誤時,底部的Dubug圖標是灰色的,有錯誤時,圖標是紅色的:

  

後期,可以在這個模塊添加更多調試功能,比如直接從API介面獲取數據等。

6、許可權管理

提供細粒度許可權管理,可以根據許可權ID,顯示、隱藏或者禁用界面控制項,也可以根據許可權ID驗證業務邏輯。一期實現示例:

VularTableColumn::make('user','業務員')
->hiddenBy('order_user_column')
->sortable(),

其中的hiddenBy就是根據許可權ID隱藏表格的order_user_column這一列。

7、關聯編輯

框架預期使用MVVM模式,View Model可以屏蔽Laravel Model之間的關係。但是,有時Laravel Model到View Model只需要簡單映射就可以,就避免不掉在界面並編輯各種關聯關係。

7.1 1對1關聯

1對1關聯的編輯,目前實現這幾種方式:1、普通輸入控制項;2、關聯編輯卡;3、彈出對話框;4、下拉選擇列表。
1、普通數據控制項
在綁定數據時,用點號區分,一期實現示例:

VTextField::make()
->field('seoMeta.title')
->label('SEO 標題')

其中field便是綁定一個一對一關聯的欄位。

2、關聯編輯卡

在後端,把這樣一個卡片,綁定到一個1對1關聯屬性上。卡片的佈局跟內容可以後端PHP中設置。
3、彈出對話框

在後端,把這樣一個對話框,綁定到一個1對1關聯屬性上。對話框的佈局跟內容可以在後端PHP中設置。
4、下拉列表
這種方式只是用來選擇一個關聯,並不能對關聯的對象進行編輯。

7.2 1對多關聯

1對多關聯,是最複雜的,目前支持這樣的編輯方式:1、1對多表格編輯; 2、1對多面板編輯;3、1對多下拉列表選擇。
1、1對多表格編輯

不需要過多解釋,後端綁定一個關聯到表格就行,表格內容可以訂製。

2、1對多面板 ,相當於這個表格的展開版:

面板內容跟佈局可以在PHP端訂製。

3、1對多下拉選擇

為了應對可能出現大數據的情況,這個列表,可以根據輸入的內容動態從後端獲取。

8、可視化編輯

目前通過RXEditor積累了可視化編輯經驗,後期可以添加可視化編輯功能,比如基於Vular構建的CMS系統,可以可視化編輯頁面。可以可視化生成後端表單代碼等。

9、生態構建

未來可以從這麼幾個層面構建生態

9.1、應用層生態

找到一個業務領域,比如我自己是做外貿的,熟悉外貿領域。在該領域內,通過Laravel擴展包的方式,可以構建針對這個業務的所有應用。就外貿行業而言,可以構建外貿建站CMS模塊,訂單管理模塊,客戶管理模塊,還可以做一些Chrome插件,結合社交網路,構建社交營銷模塊。

9.2、VUE層前端生態

根據 業務需要構建豐富的前端控制項庫,通過vue動態組件形式載入,比如不同風格的列表頁面,不同風格對話框及編輯頁面,級聯選擇框,穿梭框等 。可以充分發揮VUE JS優勢,跟隨需要,隨時構建。

9.3、可視化模板生態

我是一個做外貿的,我一定要在外貿的垂直領域,做一個針對外貿行業的CMS模塊,外貿網站用到的前端模板,基於我的可視化編輯,也可以自成一個生態系統。

草草寫完了,感覺很多東西還沒有說明白,本文檔主要用於徵集意見,查補自己設計上的疏漏,如果這個項目能順利完成,就在文檔里詳細說說吧。
對這個項目感興趣的可以加QQ群:957619750(新建的,還沒有人)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本項目目的是在移動端的 Native App 中以庫的形式集成已經寫好的 Unity 工程,利用 Unity 游戲引擎便捷的開發手段進行跨平臺開發。 ...
  • 更多的文章請看-2020iOS面試大全 持續更新! 分類 擴展 代理(Delegate) 通知(NSNotification) KVO (Key-value observing) KVC (Key-value coding) 屬性關鍵字 一、分類 1.分類的作用? 聲明私有方法,分解體積大的類文件, ...
  • 新聞 1. "喪心病狂or形勢所迫?談談Android奇葩的“鏈式啟動”" 1. "傳聞稱Android TV將更名為Google TV" 1. "谷歌官宣Android 11 Beta發佈會:6月3日見" 教程 1. "協程 Flow 最佳實踐 | 基於 Android 開發者峰會應用" 1. " ...
  • 學習 babel 時,遇到的問題,使用舊版本 babel 命名規則安裝後運行報錯,初步查找到原因是因為 babel 各個preset和plugin新舊不同版本之間存在相容問題,提示使用 npx babel-upgrade 可以自動升級,但是我升級失敗了,提示解析錯誤,後來看到了這篇文章,問題得以解決 ...
  • 一、逗號表達式 1.程式中使用逗號表達式,通產是要分別求出逗號表示式內各表達式的值,並不一定要求整個表達式的值。 2.並不是所有出現逗號的地方都組成逗號表達式,例如在變數說明中,函數參數表中逗號,只是用作各個變數之間的間隔符。 var a,b; b = (a=3,--a,a*5); console. ...
  • 介紹 集合是由一組無序且唯一(即不能重覆)的項組成的。比如由一個大於等於0的整數組成的集合:N={0,1,2,3,4,5,6,...}。 還有一個概念叫空集。用'{}'表示。 創建集合 我們使用對象來表示集合。 1 function Set() { 2 let items = {}; 3 } 常見方 ...
  • html post請求之a標簽的兩種用法舉例 1、使用ajax來發起POST請求HTML代碼如下: <a href="https://www.cnblogs.com/" class="a_post">發起POST請求</a> JQuery代碼如下: $(".a_post").on("click",f ...
  • 《Vue.js 2.x實踐指南》其實早在一年前就已經完稿,只是由於疫情的緣故耽擱了許久才下廠印刷。 本書旨在讓初學者能夠快速上手vue技術棧,並能夠利用所學知識獨立動手進行項目開發。我的寫作風格一向都是喜歡採用理論和實踐相結合的方式,這樣學習起來不會那麼枯燥,而且極具成效。時間是很寶貴的東西,所以盡 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...