ABP框架背景知識:

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

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

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

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

ABP框架主要還是基于領(lǐng)域驅(qū)動的理念來構(gòu)建整個(gè)架構(gòu)的,其中領(lǐng)域驅(qū)動包含的概念有 域?qū)ο驟ntities、倉儲對象Repositories、域服務(wù)接口層Domain Services、域事件Domain Events、應(yīng)用服務(wù)接口Application Services、數(shù)據(jù)傳輸對象DTOs等。

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

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

 

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

1)登陸界面

2)主體框架界面

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

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

 

3)用戶管理界面

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

用戶編輯界面如下所示。

當(dāng)然可以查看這個(gè)用戶本身擁有的權(quán)限功能點(diǎn),如下界面所示。

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

導(dǎo)出文件則是把列表中現(xiàn)有的數(shù)據(jù)進(jìn)行導(dǎo)入,導(dǎo)出后提示是否打開Excel文件進(jìn)行查看。

 

4)組織機(jī)構(gòu)管理

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

組織機(jī)構(gòu)的樹形列表可以進(jìn)行拖動實(shí)現(xiàn)不同層級的變化

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

 

組織機(jī)構(gòu)可以修改機(jī)構(gòu)名稱和對應(yīng)的父類節(jié)點(diǎn),如下界面所示。

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

 

添加角色界面如下所示。

 

5)角色管理

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

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

菜單編輯界面如下所示。

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

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

而菜單對于角色來說,應(yīng)該是一種界面資源,可以通過配置進(jìn)行管理對應(yīng)角色用戶的菜單,如下界面所示。

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

 

 

6)功能管理

 嚴(yán)格來說,ABP框架并沒有統(tǒng)一管理好權(quán)限功能點(diǎn)的,它沒有任何表來存儲這個(gè)功能集合,而是通過派生AuthorizationProvider的子類來定義權(quán)限功能點(diǎn)

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

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

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

 

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

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

 

7)菜單管理

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

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

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

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

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

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

這樣我們可以采用DevExpress內(nèi)置漂亮的系統(tǒng)圖標(biāo),也可選擇系統(tǒng)文件里面的圖標(biāo)文件。

如果用戶登錄系統(tǒng)后,覺得自己管理的菜單有些多,那么可以通過菜單配置的方式,選擇性的呈現(xiàn)某些菜單,把其他部分的菜單隱藏起來,這個(gè)就是自定義應(yīng)用菜單界面,界面如下所示。

 

8)系統(tǒng)登錄日志

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

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

 

9)系統(tǒng)審計(jì)日志 

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

審計(jì)日志的明細(xì)展示界面如下所示。

 

10)字典管理

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

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

批量添加字典內(nèi)容的界面如下所示。

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

 

11)參數(shù)配置模塊

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

參數(shù)配置管理模塊界面如下所示。

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

 

12) 附件管理模塊

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

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

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

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

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

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

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

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

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

 

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

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

ABP框架代碼生成

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

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

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

放到VS項(xiàng)目里面,就看到對應(yīng)的窗體界面效果了。

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