ABP框架背景知識:

ABP是ASP.NET Boilerplate的簡(jiǎn)稱(chēng),ABP是一個(gè)開(kāi)源且文檔友好的應用程序框架。ABP不僅僅是一個(gè)框架,它還提供了一個(gè)最徍實(shí)踐的基于領(lǐng)域驅動(dòng)設計(DDD)的體系結構模型。 它基本上是.NET 領(lǐng)域架構的集大成者,幾乎囊括了我們.NET領(lǐng)域排的上名的各種技術(shù)應用,而且它本身可以支持.net framework和.net core兩種技術(shù)流派。 目前基于.net core5.0基礎上進(jìn)行開(kāi)發(fā),框架支持SQLServer、Mysql、Oracle等常用數據庫的配置切換。

ABP框架的特點(diǎn):

我們來(lái)大概了解下ABP框架涉及到的內容。

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

ABP框架主要還是基于領(lǐng)域驅動(dòng)的理念來(lái)構建整個(gè)架構的,其中領(lǐng)域驅動(dòng)包含的概念有 域對象Entities、倉儲對象Repositories、域服務(wù)接口層Domain Services、域事件Domain Events、應用服務(wù)接口A(yíng)pplication Services、數據傳輸對象DTOs等。

基于A(yíng)BP框架基礎上,我們整理完善了整個(gè)權限體系,以及基于這個(gè)基礎上進(jìn)行的業(yè)務(wù)系統快速開(kāi)發(fā),我們整理后的ABP快速開(kāi)發(fā)框架的架構圖示,如下圖所示(以字典模塊為例說(shuō)明)

針對Web API接口調用的封裝,為了適應客戶(hù)端快速調用的目的,這個(gè)封裝作為一個(gè)獨立的封裝層,以方便各個(gè)模塊之間進(jìn)行共同調用。

 

2、基于Winform的ABP快速開(kāi)發(fā)框架功能介紹

1)登陸界面

2)主體框架界面

主體框架界面采用的是基于菜單的動(dòng)態(tài)生成,以及多文檔的界面布局,具有非常好的美觀(guān)性和易用性。

左側的功能樹(shù)列表和頂部的菜單模塊,可以根據角色擁有的權限進(jìn)行動(dòng)態(tài)構建,不同的角色具有不同的菜單功能點(diǎn),如下是測試用戶(hù)登錄后具有的界面。

 

3)用戶(hù)管理界面

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

用戶(hù)編輯界面如下所示。

當然可以查看這個(gè)用戶(hù)本身?yè)碛械臋嘞薰δ茳c(diǎn),如下界面所示。

用戶(hù)數據導入 ,可以根據指定模板的格式進(jìn)行填寫(xiě)后,然后導入指定的文件內容,如下所示。

導出文件則是把列表中現有的數據進(jìn)行導入,導出后提示是否打開(kāi)Excel文件進(jìn)行查看。

 

4)組織機構管理

組織機構主要就是一個(gè)層級的對象關(guān)系,一般包含但不限于公司、部門(mén)、工作組等的定義,其中組織機構包含用戶(hù)成員和角色成員的關(guān)系,如下界面所示。

組織機構的樹(shù)形列表可以進(jìn)行拖動(dòng)實(shí)現不同層級的變化

或者通過(guò)右鍵菜單進(jìn)行編輯修改操作

 

組織機構可以修改機構名稱(chēng)和對應的父類(lèi)節點(diǎn),如下界面所示。

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

 

添加角色界面如下所示。

 

5)角色管理

角色信息沒(méi)有層級關(guān)系,可以通過(guò)列表展示。

其中角色包含權限分配、角色成員和擁有菜單的維護,如下是角色編輯界面,包含角色基本信息、擁有權限、包含成員、擁有菜單的管理等。菜單對于角色來(lái)說(shuō),應該是一種界面資源,可以通過(guò)配置進(jìn)行管理對應角色用戶(hù)的菜單。

菜單編輯界面如下所示。

角色的權限包含系統可以用的權限,并可以勾選為角色設置所需的功能點(diǎn),如下界面所示。

用戶(hù)成員則和機構的用戶(hù)管理一樣,可以指定多個(gè)用戶(hù),這里不再贅述。

而菜單對于角色來(lái)說(shuō),應該是一種界面資源,可以通過(guò)配置進(jìn)行管理對應角色用戶(hù)的菜單,如下界面所示。

通過(guò)配置好的菜單,用戶(hù)登錄系統后,系統根據當前用戶(hù)具有的菜單項目,動(dòng)態(tài)構建顯示對應的列表菜單和工具欄菜單。

 

 

6)功能管理

 嚴格來(lái)說(shuō),ABP框架并沒(méi)有統一管理好權限功能點(diǎn)的,它沒(méi)有任何表來(lái)存儲這個(gè)功能集合,而是通過(guò)派生AuthorizationProvider的子類(lèi)來(lái)定義權限功能點(diǎn)

我在這個(gè)基礎上引入了一個(gè)權限功能的表用來(lái)存儲功能點(diǎn)的,然后提供管理界面來(lái)動(dòng)態(tài)維護這些功能點(diǎn)。如下界面所示。

我們剛才在角色里面看到可以分配的權限內容,就是基于這個(gè)權限表的信息展示。

這樣我們可以動(dòng)態(tài)添加或者批量添加所需要的功能點(diǎn),并且和整個(gè)權限管理模塊串聯(lián)起來(lái),形成一個(gè)完整的控制體系。

 

另外我們還可以通過(guò)左側樹(shù)列表的右鍵菜單管理列表,如下所示可以級聯(lián)刪除對應的節點(diǎn)及其下面所有子節點(diǎn)。

系統登錄后,客戶(hù)端自動(dòng)獲取對應用戶(hù)的角色功能點(diǎn),然后我們每次打開(kāi)一個(gè)新的業(yè)務(wù)窗體,客戶(hù)端會(huì )進(jìn)行界面的權限邏輯控制,如果沒(méi)有權限的,那么不可以訪(fǎng)問(wèn)操作,如下是禁止了產(chǎn)品信息的導入、導出、新增、編輯等操作功能,如下界面所示產(chǎn)品界面被動(dòng)態(tài)取消相關(guān)權限后,界面禁止了某些操作功能。

 

7)菜單管理

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

在A(yíng)BP快速開(kāi)發(fā)框架里面,我們依舊采用Winform開(kāi)發(fā)框架里面用到的菜單維護方式,在權限模塊系統中維護菜單內容,并在用戶(hù)登錄系統后,動(dòng)態(tài)加載菜單展示,并通過(guò)菜單的配置信息,可以動(dòng)態(tài)展示不同的窗體信息。

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

左側列表依舊可以通過(guò)右鍵菜單進(jìn)行維護管理。

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

我們可以通過(guò)選擇圖標按鈕進(jìn)行菜單圖標的選擇,如下是選擇菜單圖片的界面。

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

如果用戶(hù)登錄系統后,覺(jué)得自己管理的菜單有些多,那么可以通過(guò)菜單配置的方式,選擇性的呈現某些菜單,把其他部分的菜單隱藏起來(lái),這個(gè)就是自定義應用菜單界面,界面如下所示。

 

8)系統登錄日志

登錄日志,這個(gè)就是用戶(hù)嘗試登錄的時(shí)候,留下的記錄信息,其中包括用戶(hù)的登錄用戶(hù)名,ID,IP地址、登錄時(shí)間,以及登錄是否成功的狀態(tài)等信息。

 這個(gè)登錄日志,就是在系統登錄嘗試的時(shí)候,留下的記錄,可供管理員進(jìn)行跟蹤了解某個(gè)賬戶(hù)的使用情況,也可以根據這些登錄信息進(jìn)行一個(gè)統計報表的分析。

 

9)系統審計日志 

審計日志,設置我們在訪(fǎng)問(wèn)或者調用某個(gè)應用服務(wù)層接口的時(shí)候,橫切面流下的一系列操作記錄,其中記錄我們訪(fǎng)問(wèn)的服務(wù)接口,參數,客戶(hù)端IP地址,訪(fǎng)問(wèn)時(shí)間,以及異常等信息,這些操作都是在A(yíng)BP系統自動(dòng)記錄的,如果我們需要屏蔽某些服務(wù)類(lèi)或者接口,則這些就不會(huì )記錄在里面,否則默認是記錄的。

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

 

10)字典管理

字典管理界面,左側列出字典類(lèi)型,并對字典類(lèi)型下的字典數據進(jìn)行分頁(yè)展示,右側則利用分頁(yè)展示對應字典類(lèi)型的字典數據,字典管理界面如下所示。

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

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

省份城市行政區的模塊管理,也主要是為了提供一個(gè)三級聯(lián)動(dòng)的字典列表給界面使用,因此這里對這些統計局的數據進(jìn)行一個(gè)維護和展示出來(lái),如下界面所示。

 

11)參數配置模塊

一般來(lái)說(shuō),一個(gè)系統或多或少都會(huì )涉及到一些系統參數或者用戶(hù)信息的配置,而ABP框架也提供了一套配置信息的管理模塊,ABP框架的配置信息,必須提前定義好配置的各項內容,然后才能在系統中初始化或者通過(guò)接口查詢(xún)來(lái)使用,本ABP快速開(kāi)發(fā)框架引入了另外一種配置信息的定義,實(shí)現更加簡(jiǎn)化的處理。

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

配置模塊使用主要特點(diǎn)是以鍵為操作對象,然后內容是JSON序列化后的內容,可以存儲用戶(hù)自定義的類(lèi)的序列號字符串,通過(guò)整合了SettingsProvider.net組件,使得我們操作配置內容更加方便和動(dòng)態(tài)化。

 

12) 附件管理模塊

該模塊其實(shí)是很通用的一個(gè)模塊,例如我們的一些日常記錄,可能會(huì )伴隨著(zhù)有圖片、文檔等的附件管理,如果為每個(gè)業(yè)務(wù)對象都做一個(gè)附件管理,或者每次開(kāi)發(fā)系統都重新做,那么效率肯定沒(méi)有直接采用通用的附件管理那么方便快捷了。

其實(shí)這個(gè)模塊是基于我的Winform開(kāi)發(fā)框架開(kāi)發(fā)的,同樣現在的ABP快速開(kāi)發(fā)框架的Winform端依舊可以使用這些模塊的界面和大概的處理規則,我們把它利用ABP框架的獲取數據方式調整一下即可。

首先我們創(chuàng )建一個(gè)獨立的控件,用于放到編輯數據記錄窗口里面,如下所示。

這樣在項目中集成(如數據編輯窗口),直接拖動(dòng)這個(gè)控件到界面中,運行就可以看到下面的效果了。

由于一般創(chuàng )建記錄的時(shí)候,給他指定一個(gè)GUID的附件組ID,這樣我們在數據記錄保存前,我們就可以上傳附件了,如下所示。

而且在這個(gè)過(guò)程中,可以隨時(shí)查看自己在該記錄中已經(jīng)上傳的附件。如果附件不夠,可以隨時(shí)啟動(dòng)上傳操作,附件支持多選文件,然后一次性,啟動(dòng)后臺線(xiàn)程操作方式,把文件上傳及附件記錄保存到數據庫。

由于是附件管理,因此有可能上傳各種文件,包括Word文檔、Excel文檔、壓縮文件,以及各種類(lèi)型的圖片,因此為了方便對圖片的查看,這個(gè)控件集成了圖片查看控件,可以非常方便直接讀取圖片附件的數據流作為對象展示,該圖片控件支持對圖片的滾動(dòng)放大縮小、左右翻轉、選擇放大、圖片移動(dòng)、保存圖片等功能,不需要查看,直接使用ESC退出即可。

附件管理在很多信息化管理系統中很普遍使用,例如我在病人管理系統界面里面,可以在一個(gè)界面里面分門(mén)別類(lèi)管理很多影像學(xué)的圖片資料,通過(guò)查看附件,可以看到其中一些圖片附件的縮略圖,需要進(jìn)一步查看,可以雙擊圖片即可實(shí)現預覽效果。

通用附件管理模塊,就是基于這些特點(diǎn),實(shí)現圖片、Excel文檔、Word文檔和PDF等文檔的在線(xiàn)預覽和管理操作,界面截圖如下所示。

 

以上就是框架里面主要的模塊內容展示,當然我們可以結合代碼生成工具來(lái)快速開(kāi)發(fā)自己的業(yè)務(wù)管理模塊,而這些主要就是設計好數據庫后,對框架代碼和界面代碼的統一生成后進(jìn)行整合到主體框架里面即可,可以獲得高效、統一、快速的開(kāi)發(fā)體驗。

詳細的代碼生成工具開(kāi)發(fā)過(guò)程,可以了解隨筆《利用代碼生成工具生成基于A(yíng)BP框架的代碼 》、《ABP開(kāi)發(fā)框架前后端開(kāi)發(fā)系列---(8)ABP框架之Winform界面的開(kāi)發(fā)過(guò)程

ABP框架代碼生成

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

ABP框架的Winform界面開(kāi)發(fā)

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

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

生成界面后,進(jìn)行一定的布局調整就可以實(shí)際用于生產(chǎn)環(huán)境了,省卻了很多時(shí)間。