ABP開發框架前後端開發系列---(14)基於Winform的ABP快速開發框架

来源:https://www.cnblogs.com/wuhuacong/archive/2019/07/03/11125693.html
-Advertisement-
Play Games

前面介紹了很多ABP系列的文章,一步一步的把我們日常開發中涉及到的Web API服務構建、登錄日誌和操作審計日誌、字典管理模塊、省份城市的信息維護、許可權管理模塊中的組織機構、用戶、角色、許可權、菜單等內容,以及配置管理模塊,界面的高級查詢處理等內容,同時我們把整個開發理念結合我們的代碼生成工具Data... ...


前面介紹了很多ABP系列的文章,一步一步的把我們日常開發中涉及到的Web API服務構建、登錄日誌和操作審計日誌、字典管理模塊、省份城市的信息維護、許可權管理模塊中的組織機構、用戶、角色、許可權、菜單等內容,以及配置管理模塊,界面的高級查詢處理等內容,同時我們把整個開發理念結合我們的代碼生成工具Database2Sharp進行快速的開發,快速開發分為兩個部分:一個是Web API部分的ABP框架代碼生成,包括領域實體層、應用服務層、公用DTO和介面層、API調用Caller層等內容的生成,並且整合了我們封裝的基類,以便生成的代碼更加簡潔,但卻具有更加強大、易用的功能函數;另一個快速生成的部分是界面生成,我們根據我們在Winform領域多年的開發,整合了分頁、公用類庫和Winform基礎界面類的基礎上實現了快速的Winform界面生成,並且Winform界面生成可以根據需要配置列表查詢條件、列表顯示內容,編輯界面的欄位顯示等等內容,並且生成的Winform界面自動具有和ABP快速框架整體調用通用規則。

1、ABP框架背景知識介紹

ABP是ASP.NET Boilerplate的簡稱,ABP是一個開源且文檔友好的應用程式框架。ABP不僅僅是一個框架,它還提供了一個最徍實踐的基於領域驅動設計(DDD)的體繫結構模型。學習使用ABP框架也有一段時間了,一直想全面瞭解下這個框架的整個來龍去脈,並把想把它使用歷程整理成一個系列出來,不過一直沒有下筆來寫這篇文章的開篇,就是希望能夠深入瞭解,再深入瞭解一些,希望自己能夠理解透徹一些,不能誤人子弟,也不想和網上千篇一律的翻譯官網的內容,官網的英文介紹也已經很詳細了,於是我覺得還是以實際使用的過程進行一定的整理會更好。

初次瞭解ABP框架,對它還是非常驚艷的,它基本上是.NET 領域架構的集大成者,幾乎囊括了我們.NET領域排的上名的各種技術應用,而且它本身可以支持.net framework和.net core兩種技術流派,對它的介紹也是非常感興趣。

1)ABP框架的特點

我們來大概瞭解下ABP框架涉及到的內容。

  • 依賴註入,這個部分使用 Castle windsor (依賴註入容器)來實現依賴註入,這個也是我們經常使用IOC來處理的方式;
  • Repository倉儲模式,已實現了Entity Framework、NHibernate、MangoDB、記憶體資料庫等,倉儲模式可以快速實現對數據介面的調用;
  • 身份驗證與授權管理,可以使用聲明特性的方式對用戶是否登錄,或者介面的許可權進行驗證,可以通過一個很細粒度的方式,對各個介面的調用許可權進行設置;
  • 數據有效性驗證,ABP自動對介面的輸入參數對象進行非空判斷,並且可以根據屬性的申請信息對屬性的有效性進行校驗;
  • 審計日誌記錄,也就是記錄我們對每個介面的調用記錄,以及對記錄的創建、修改、刪除人員進行記錄等處理;
  • Unit Of Work工作單元模式,為應用層和倉儲層的方法自動實現資料庫事務,預設所有應用服務層的介面,都是以工作單元方式運行,即使它們調用了不同的存儲對象處理,都是處於一個事務的邏輯裡面;
  • 異常處理,ABP框架提供了一整套比較完善的流程處理操作,可以很方便的對異常進行進行記錄和傳遞;
  • 日誌記錄,我麽可以利用Log4Net進行常規的日誌記錄,方便我們跟蹤程式處理信息和錯誤信息;
  • 多語言/本地化支持,ABP框架對多語言的處理也是比較友好的,提供了對XML、JSON語言信息的配置處理;
  • Auto Mapping自動映射,這個是ABP的很重要的對象隔離概念,通過使用AutoMaper來實現域對象和DTO對象的屬性映射,可以隔離兩者的邏輯關係,但是又能輕鬆實現屬性信息的賦值;
  • 動態Web API層,利用這個動態處理,可以把Application Service 直接發佈為Web API層,而不需要在累贅的為每個業務對象手工創建一個Web API的控制器,非常方便;
  • 動態JavaScript的AJax代理處理,可以自動創建Javascript 的代理層來更方便使用Web Api,這個在Web層使用。

除了這些重要特性外,ABP框架還有很多一些特別的功能或者概念。

  • 多租戶支持(每個租戶的數據自動隔離,業務模塊開發者不需要在保存和查詢數據時寫相應代碼;
  • 軟刪除支持(繼承相應的基類或實現相應介面,會自動實現軟刪除)
  • 系統設置存取管理(系統級、租戶級、用戶級,作用範圍自動管理)
  • EventBus實現領域事件(Domain Events)
  • 模塊以及模塊的依賴關係實現插件化的模塊處理等等

ABP框架主要還是基於領域驅動的理念來構建整個架構的,其中領域驅動包含的概念有 域對象Entities、倉儲對象Repositories、域服務介面層Domain Services、域事件Domain Events、應用服務介面Application Services、數據傳輸對象DTOs等。

ABP官方網站:http://www.aspnetboilerplate.com,從裡面可以查看很詳細的案例和文檔說明,可以根據需要下載不同類型的基礎框架。

ABP GitHub源碼地址:https://github.com/aspnetboilerplate,可以下載整個基礎的框架內容,以及相關的樣板案例代碼。

 

基於ABP框架基礎上,我們整理完善了整個許可權體系,以及基於這個基礎上進行的業務系統快速開發,我們整理後的ABP快速開發框架的架構圖示,如下圖所示(以字典模塊為例說明)

針對Web API介面調用的封裝,為了適應客戶端快速調用的目的,這個封裝作為一個獨立的封裝層,以方便各個模塊之間進行共同調用。

 

2、基於Winform的ABP快速開發框架功能介紹

1)登陸界面

2)主體框架界面

主體框架界面採用的是基於菜單的動態生成,以及多文檔的界面佈局,具有非常好的美觀性和易用性。

左側的功能樹列表和頂部的菜單模塊,可以根據角色擁有的許可權進行動態構建,不同的角色具有不同的菜單功能點,如下是測試用戶登錄後具有的界面。

 

3)用戶管理界面

用戶列表包括分頁查詢、導入、導出用戶數據,以及可以利用右鍵菜單進行新增、編輯用戶記錄,或者對指定用戶進行重置密碼操作。

用戶編輯界面如下所示。

當然可以查看這個用戶本身擁有的許可權功能點,如下界面所示。

用戶數據導入 ,可以根據指定模板的格式進行填寫後,然後導入指定的文件內容,如下所示。

導出文件則是把列表中現有的數據進行導入,導出後提示是否打開Excel文件進行查看。

 

4)組織機構管理

組織機構主要就是一個層級的對象關係,一般包含但不限於公司、部門、工作組等的定義,其中組織機構包含用戶成員和角色成員的關係,如下界面所示。

組織機構的樹形列表可以進行拖動實現不同層級的變化

或者通過右鍵菜單進行編輯修改操作

 

組織機構可以修改機構名稱和對應的父類節點,如下界面所示。

組織機構包含的成員可以添加多個人員記錄,添加界面如下所示。

 

添加角色界面如下所示。

 

5)角色管理

角色信息沒有層級關係,可以通過列表展示。

其中角色包含許可權分配、角色成員和擁有菜單的維護,如下是角色編輯界面,包含角色基本信息、擁有許可權、包含成員、擁有菜單的管理等。菜單對於角色來說,應該是一種界面資源,可以通過配置進行管理對應角色用戶的菜單。

菜單編輯界面如下所示。

角色的許可權包含系統可以用的許可權,並可以勾選為角色設置所需的功能點,如下界面所示。

用戶成員則和機構的用戶管理一樣,可以指定多個用戶,這裡不再贅述。

而菜單對於角色來說,應該是一種界面資源,可以通過配置進行管理對應角色用戶的菜單,如下界面所示。

通過配置好的菜單,用戶登錄系統後,系統根據當前用戶具有的菜單項目,動態構建顯示對應的列表菜單和工具欄菜單。

 

 

6)功能管理

 嚴格來說,ABP框架並沒有統一管理好許可權功能點的,它沒有任何表來存儲這個功能集合,而是通過派生AuthorizationProvider的子類來定義許可權功能點

我在這個基礎上引入了一個許可權功能的表用來存儲功能點的,然後提供管理界面來動態維護這些功能點。如下界面所示。

我們剛纔在角色裡面看到可以分配的許可權內容,就是基於這個許可權表的信息展示。

這樣我們可以動態添加或者批量添加所需要的功能點,並且和整個許可權管理模塊串聯起來,形成一個完整的控制體系。

 

另外我們還可以通過左側樹列表的右鍵菜單管理列表,如下所示可以級聯刪除對應的節點及其下麵所有子節點。

系統登錄後,客戶端自動獲取對應用戶的角色功能點,然後我們每次打開一個新的業務窗體,客戶端會進行界面的許可權邏輯控制,如果沒有許可權的,那麼不可以訪問操作,如下是禁止了產品信息的導入、導出、新增、編輯等操作功能,如下界面所示產品界面被動態取消相關許可權後,界面禁止了某些操作功能。

 

7)菜單管理

Winform主界面的開發,基本上都是標準的界面,在頂部放置工具欄,中間區域則放置多文檔的內容,但是在頂部菜單比較多的時候,就需要把菜單分為幾級處理,如可以在頂部菜單放置一二級菜單,這種方式在一般功能點不算太多的情況下,呈現的界面效果較為直觀、也較為美觀。不過隨著一些系統功能的增多,這種方式可能就會顯得工具欄比較擁擠,那麼我們是否可以在左側放置一個樹形列表,這樣通過樹形列表的收縮摺疊,就可以放置非常多的菜單功能了。

在ABP快速開發框架裡面,我們依舊採用Winform開發框架裡面用到的菜單維護方式,在許可權模塊系統中維護菜單內容,併在用戶登錄系統後,動態載入菜單展示,並通過菜單的配置信息,可以動態展示不同的窗體信息。

菜單資源管理的列表界面界面如下所示

左側列表依舊可以通過右鍵菜單進行維護管理。

雙擊樹列表或者右側的列表,都可以對已有的菜單進行編輯,菜單編輯界面如下所示。

我們可以通過選擇圖標按鈕進行菜單圖標的選擇,如下是選擇菜單圖片的界面。

這樣我們可以採用DevExpress內置漂亮的系統圖標,也可選擇系統文件裡面的圖標文件。

如果用戶登錄系統後,覺得自己管理的菜單有些多,那麼可以通過菜單配置的方式,選擇性的呈現某些菜單,把其他部分的菜單隱藏起來,這個就是自定義應用菜單界面,界面如下所示。

 

8)系統登錄日誌

登錄日誌,這個就是用戶嘗試登錄的時候,留下的記錄信息,其中包括用戶的登錄用戶名,ID,IP地址、登錄時間,以及登錄是否成功的狀態等信息。

 這個登錄日誌,就是在系統登錄嘗試的時候,留下的記錄,可供管理員進行跟蹤瞭解某個賬戶的使用情況,也可以根據這些登錄信息進行一個統計報表的分析。

 

9)系統審計日誌 

審計日誌,設置我們在訪問或者調用某個應用服務層介面的時候,橫切麵流下的一系列操作記錄,其中記錄我們訪問的服務介面,參數,客戶端IP地址,訪問時間,以及異常等信息,這些操作都是在ABP系統自動記錄的,如果我們需要屏蔽某些服務類或者介面,則這些就不會記錄在裡面,否則預設是記錄的。

審計日誌的明細展示界面如下所示。

 

10)字典管理

字典管理界面,左側列出字典類型,並對字典類型下的字典數據進行分頁展示,右側則利用分頁展示對應字典類型的字典數據,字典管理界面如下所示。

新增或者編輯窗體界面如下

批量添加字典內容的界面如下所示。

省份城市行政區的模塊管理,也主要是為了提供一個三級聯動的字典列表給界面使用,因此這裡對這些統計局的數據進行一個維護和展示出來,如下界面所示。

 

11)參數配置模塊

一般來說,一個系統或多或少都會涉及到一些系統參數或者用戶信息的配置,而ABP框架也提供了一套配置信息的管理模塊,ABP框架的配置信息,必須提前定義好配置的各項內容,然後才能在系統中初始化或者通過介面查詢來使用,本ABP快速開發框架引入了另外一種配置信息的定義,實現更加簡化的處理。

參數配置管理模塊界面如下所示。

配置模塊使用主要特點是以鍵為操作對象,然後內容是JSON序列化後的內容,可以存儲用戶自定義的類的序列號字元串,通過整合了SettingsProvider.net組件,使得我們操作配置內容更加方便和動態化。

 

以上就是框架裡面主要的模塊內容展示,當然我們可以結合代碼生成工具來快速開發自己的業務管理模塊,而這些主要就是設計好資料庫後,對框架代碼和界面代碼的統一生成後進行整合到主體框架裡面即可,可以獲得高效、統一、快速的開發體驗。

詳細的代碼生成工具開發過程,可以瞭解隨筆《利用代碼生成工具生成基於ABP框架的代碼 》、《ABP開發框架前後端開發系列---(8)ABP框架之Winform界面的開發過程

ABP框架代碼生成

最終根據根據選擇資料庫表信息,一鍵生成相關ABP架構分層代碼,文件結構如下所示。

ABP框架的Winform界面開發

設置好後直接生成,代碼工具就可以依照模板來生成所需要的WInform列表界面和編輯界面的內容了,如下是生成的界面代碼。

放到VS項目裡面,就看到對應的窗體界面效果了。

生成界面後,進行一定的佈局調整就可以實際用於生產環境了,省卻了很多時間。


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

-Advertisement-
Play Games
更多相關文章
  • 本節導航 Swagger介紹 在ASP.NET CORE 中的使用swagger   在軟體開發中,管理和測試API是一件重要而富有挑戰性的工作。在我之前的文章 "《研發團隊,請管好你的API文檔》 " 也專門闡述了通過文檔管理工具,來保證API文檔和代碼的一致性,這樣更加有助於 ...
  • 一般情況下,restfult api 進行數據返回或模型綁定,預設json格式會比較常見和方便,當然偶爾也會需要以XML格式的要求 對於返回XML,普通常見的方式就是在每個aciton方法進行諸如XmlFormatter此類的序列化處理, 而對於接收XML,則是進行一些額外的XML解析操作或反序列化 ...
  • 題目描述 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。例如:下麵的二維數組就是每行、每列都遞增排序。如果在這個數組中查找數字7,則返回true;如果查找 ...
  • 命令執行位置:工具=〉Nuget包管理器=〉程式包管理器控制台 一、安裝 1.安裝指定版本類庫install-package <程式包名> -version <版本號> 2.安裝到指定的項目install-package <程式包名> -project XXXProjectName -version ...
  • Array類 a) IEumerable介面是由foreach語句用於迭代數組的介面。 b) ICollection介面派生於IEumerable介面,這個介面主要用於確定集合中的元素個數,或用於同步。 c) IList介面派生於ICollection介面,Array類實現IList介面的主要原因是 ...
  • 在 asp.net core 中全局異常處理,有時候可能不能滿足我們的需要,可能就需要自己自定義一個中間件處理了,最近遇到一個問題,有一些異常,不希望記錄錯誤日誌,目前主要是用戶請求取消導致的 `TaskCanceledException` 和 `OperationCanceledException... ...
  • 前段時間我一直在研究PIE SDK與Python的結合,因為在我的開發中,我想獲取一張圖片的統計直方圖,雖然在SDK中有提供關於直方圖的類介面(如IStatsHistogram 介面、HistogramStatDialog 類),但其中有些方法得到的結果數據是有些小問題的(已經向技術人員反應),所以 ...
  • 先 NuGet兩個程式集 1:MongoDB.Driver、 2:MongoDB.Bson namespace ConsoleApp1{ /// <summary> /// MongoDb幫助類 /// </summary> /// <summary> /// MongoDb幫助類 /// </su ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...