EAV模型(實體-屬性-值)的設計和低代碼的處理方案(3)-- 實體屬性定義及前端列表展示和數據錄入處理

来源:https://www.cnblogs.com/wuhuacong/p/18219670
-Advertisement-
Play Games

前面兩篇隨筆介紹了EAV模型(實體-屬性-值)的設計思路和Winform前端對於通用查詢的處理,本篇隨筆繼續深入EAV模型(實體-屬性-值)設計的探討,介紹實體屬性的定義,以及根據不同屬性的定義構建不同的輸入控制項處理,以及列表界面的展示。旨在結合關係型資料庫的熟練使用、性能優勢和MongoDB資料庫... ...


前面兩篇隨筆介紹了EAV模型(實體-屬性-值)的設計思路和Winform前端對於通用查詢的處理,本篇隨筆繼續深入EAV模型(實體-屬性-值)設計的探討,介紹實體屬性的定義,以及根據不同屬性的定義構建不同的輸入控制項處理,以及列表界面的展示。旨在結合關係型資料庫的熟練使用、性能優勢和MongoDB資料庫的彈性化文檔處理特點,為低代碼的處理方案提供一個實用的思路供參考。

1、實體屬性定義

根據實體定義的一些特性,我們設計了下麵的定義界面,主要就是對實體類屬性的各種類型或者數據關聯處理進行更好的維護,以及控制屬性的可排序、可查詢、是否可用、是否只讀、是否隱藏值、是否必填等常規特性。

在通用的列表展示的時候,我們會根據屬性的定義信息來統一展現不同的控制項以及相關的屬性設置,如常規可以根據儲存類型來定義不同的控制項輸入,如文本、多文本、日期、整形、浮點型等數據,進一步還可以綁定下拉列表(動態字典、靜態列表或者在欄位自身值列表),也可以選擇在選擇字典的時候,複製某些值,或者在選擇其他業務表的時候,同步複製關聯的值等等,以及可以再前端類型進一步細化定義一些類型,如選擇系統用戶、系統機構、系統角色、查看附件、系統業務編碼等等,這些內置的處理能夠更貼切的符合實際系統的數據選擇需求。

例如對於一些常規的欄位屬性(如產品名稱),我們預設保留存儲類型為varchar即可。

 而對於一些需要引用字典信息的,我們可以選擇設置系統字典類型,如下所示。

而對於需要在數據錄入的時候設置為下拉列表的方式(單選或者覆選),並指定動態字典的,也可以實現。

前端的輸入類型,有覆選框、單選框組、評分控制項、下拉列表、系統用戶、系統角色、系統機構、系統附件、系統業務表編碼 等選項,分別對應不同的控制項界面錄入處理。

我們選中通用的下拉列表,可以進一步指定是單選還是多選,並且數據來源可以為靜態、動態、欄位所有唯一值等不同的方式。 

如果我們定義了很多不同的實體類型業務表,那麼如果需要主從表中選擇複製某些欄位,如何實現呢,通過上面的表選擇設置即可實現。

  

2、WInform前端列表展示和數據錄入處理

有了上面的準備定義工作,我們就可以為通用的EAV列表界面展示進行處理了,常規的列表界面分為單業務表的顯示(如產品信息),以及主從表的業務顯示(如訂單和訂單明細),如下界面所示。

單業務表的顯示(如產品信息)

可以看到,這個列表的展示和常規開發的業務表顯示沒有太大的差異,也可以根據欄位進行查詢,以及進行自定義條件查詢、或者進行高級查詢。

 主從表的業務顯示(如訂單和訂單明細)

 這兩種不同的數據展示方式,自動根據系統屬性設置關聯進行動態創建(在屬性定義的時候,指定了包含的明細對象)。

有了列表信息的動態展示,我們還需要確定每行記錄的數據錄入控制項類型。

前面介紹了界面控制項錄入的類型,常規可以根據儲存類型來定義不同的控制項輸入,如文本、多文本、日期、整形、浮點型等數據,進一步還可以綁定下拉列表(動態字典、靜態列表或者在欄位自身值列表),也可以選擇在選擇字典的時候,複製某些值,或者在選擇其他業務表的時候,同步複製關聯的值等等,以及可以再前端類型進一步細化定義一些類型,如選擇系統用戶、系統機構、系統角色、查看附件、系統業務編碼等等。

對於整數或者帶有小數點的浮點數,可以使用SpinEdit的輸入來錄入數值內容,如下所示,並可以定義設置顯示的格式。 

同理對於日期類型,一樣也是構建一個DateEdit控制項用來錄入數據,如下所示。

對於一些錄入,有時候根據自身欄位已有的數據列表進行選擇錄入,如下所示。

這個欄位選擇的時自身的值列表配置,如下是它的屬性定義。

對於覆選框、評分控制項,也是根據配置信息,構建對應的錄入控制項的,如下界面所示。

對於系統用戶、角色、機構的選擇信息,我們可以根據用戶是否允許多選來構建選擇界面,定義好選擇用戶、角色、機構的界面即可,如下所示。

選擇機構的界面如下所示。

 選擇角色的界面類似(多選出現覆選框),如下麵所示。

 

 我們也可以指定屬性為系統的附件,

 從而在列表顯示並編輯的時候,接受系統上傳的附件並顯示附件的數量

單擊按鈕,可以打開查看記錄的附件的列表信息。 

 另外,對於一些業務編碼,我們也可以內置進行快速生成,使用系統配置好的生成編碼規則,能夠更好的符合我們實際的需求。

 系統業務編碼規則管理是我們系統業務中的一個通用模塊,可以引用它進行生成即可。

 這樣我們在創建訂單的時候,可以根據這個約定好的規則進行生成訂單編碼,是不是很方便?

 

3、動態業務菜單的定義

 上面我們介紹了實體類型的屬性定義,以及通用的EAV數據列表界面展示,包括單業務列表界面,以及主從表界面的展示,並已經完成了各種常規輸入控制項類型的處理,包括系統字典、系統用戶、系統角色、系統機構、系統附件、系統業務編碼規則等,基本上覆蓋了我們大多數的業務錄入的需求了。

完成了上面的那些工作,我們來考慮動態業務菜單的問題,動態菜單是系統的一個管理模塊,管理系統所有可用的菜單,並可以根據不同的角色授權不同的菜單,從而實現更加個性化的系統界面展示。

前面介紹了可以定製不同的業務實體類型,如下界面定義了很多不同的業務實體類型。

隨著我們業務定義的變化,肯定會定義更多的實體類型,那麼我們就要考慮動態菜單與具體的業務實體類型結合的問題了。

通過結合一個特定業務的菜單和一個特定的實體類型,我們就可以讓系統打開一個業務的列表界面顯示,從而實現常規的菜單元素的管理和分配了。

我們改造一下傳統的菜單定義,我們只需要確定這個菜單項目為EAV的業務菜單和具體的綁定實體類型ID即可,如下界面所示。

我們通過再菜單編輯/新增界面中,指定菜單為EAV模式菜單,並確定好關聯的實體類型ID(可以通過彈出框選擇),從而創建一個EAV業務菜單即可。

同理,對於訂單和訂單明細的主從表列表業務,也是通用的處理方式,如下界面所示。

這樣,我們在動態菜單中單擊處理,就可以傳遞對應的實體類型ID給具體的窗體,並通過實體類型ID進行對應的初始化和顯示記錄即可,如下是單表的EAV模式的產品信息表的顯示和錄入處理界面。

下麵則是主從表的(訂單和訂單明細表)的顯示和錄入處理界面。 

這樣,通過直接配置而不需要編碼,就可以實現常規業務表的設計,並可以結合動態菜單的方式,給客戶進行開發,可以快速根據客戶的需求進行增加或者修改欄位,調整欄位錄入方式,順序,可用等等,實現快速開發的響應。

同時,由於數據記錄是存儲在MongoDB的資料庫上,即使數據量很大,也是能夠高性能的進行響應,減少了關係型資料庫在多表聯合的弊端,同時還能利用數據文檔的可修改性等突出特點,極大的減少編碼的開發出來,可以說基本是零代碼的開發方式。 

深入一點,我們可以記錄每個欄位的修改日誌,增加每個欄位對不同人員的可見性(可訪問性)、可修改性等進行控制,從而實現更加彈性化的展示和錄入的處理方式。

 

專註於代碼生成工具、.Net/.NetCore 框架架構及軟體開發,以及各種Vue.js的前端技術應用。著有Winform開發框架/混合式開發框架、微信開發框架、Bootstrap開發框架、ABP開發框架、SqlSugar開發框架等框架產品。
  轉載請註明出處:撰寫人:伍華聰  http://www.iqidi.com 
    

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

-Advertisement-
Play Games
更多相關文章
  • 概述 什麼是配置?chatGPT是這麼回答的: 配置項(Configuration Item)是一個廣泛使用的術語,尤其在軟體開發、系統管理和IT服務管理中。它通常指的是系統或應用程式中的一個可配置的元素,可以用來調整系統或應用的行為、性能或其他特性。配置項可以是軟體、硬體、文檔、資料庫、參數設置等 ...
  • 將多個第三方包封裝成一個項目後,如果你的目的是讓其他開發人員可以直接引用這些依賴,一般來說有兩種常見的方式: 打成JAR包:將封裝好的項目編譯打包成JAR文件,其他開發人員可以將這個JAR文件添加到他們的項目中,併在項目的構建工具(比如Maven)中配置該JAR作為依賴。這樣做的好處是簡單直接,其他 ...
  • 本文介紹在Visual Studio中,通過屬性表,使得一個新建解決方案中的項目可以快速配置已有解決方案的項目中各類已編譯好的C++第三方庫的方法~ ...
  • strcpy和memcpy 目錄strcpy和memcpy 複製內容: strcpy:專門用於複製字元串,它會一直複製直到遇到源字元串中的'\0'結束符。這意味著如果源字元串長度超過了目標緩衝區的大小(不包括'\0'),就會發生緩衝區溢出,這是一個常見的安全隱患。 memcpy:可以複製任意內容,如 ...
  • 正文 晚上跳舞回來,在便利店照例買根冰淇淋吃。看到店裡的老闆娘在訓她孩子。言辭依稀可以聽見考上好初中之類。 當時一個臨時起意,打算買兩根冰淇淋,塞一根到他手上,說一句:“我小時候也老被罵,沒什麼。” 然後跑掉。但是在冰櫃里翻了半天,都沒找到自己想吃的那種。與此同時,聽到他媽媽聲色俱厲地說:“你知道我小時 ...
  • 在這篇文章中,我們介紹瞭如何利用大型語言模型為情人節營造難忘的氛圍。通過上傳圖片併進行風格轉化,我們可以為對方呈現一幅獨特的作品,增添浪漫的色彩。同時,藉助搜索功能,我們能夠輕鬆獲取與情人節相關的信息,為策劃活動提供更多靈感和建議。 ...
  • 前言:最近幾天有好幾個小伙伴玩WPF,遇到不同頁面,不知道要怎麼傳遞消息。於是,我今天就來演示一個事件聚合器的玩法,採用prism框架來實現。作為福利,內容附帶了主頁面打開對話框時候直接通過參數傳遞消息的一個小例子,具體請自行圍觀。 以下內容,創建wpf項目以及引用prism和實現依賴註入等細節,可 ...
  • IEC60870-5-104 是一種電力自動化系統中常用的通信協議,使用 TCP/IP 協議作為底層通信協議,用於監視和控制電力系統中的各種設備,如變電站、發電機、開關等。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...