前面介紹了不少ABP系列的文章,一步一步的把咱們平常開發中涉及到的Web API服務構建、登陸日誌和操做審計日誌、字典管理模塊、省份城市的信息維護、權限管理模塊中的組織機構、用戶、角色、權限、菜單等內容,以及配置管理模塊,界面的高級查詢處理等內容,同時咱們把整個開發理念結合咱們的代碼生成工具Database2Sharp進行快速的開發,快速開發分爲兩個部分:一個是Web API部分的ABP框架代碼生成,包括領域實體層、應用服務層、公用DTO和接口層、API調用Caller層等內容的生成,而且整合了咱們封裝的基類,以便生成的代碼更加簡潔,但卻具備更增強大、易用的功能函數;另外一個快速生成的部分是界面生成,咱們根據咱們在Winform領域多年的開發,整合了分頁、公用類庫和Winform基礎界面類的基礎上實現了快速的Winform界面生成,而且Winform界面生成能夠根據須要配置列表查詢條件、列表顯示內容,編輯界面的字段顯示等等內容,而且生成的Winform界面自動具備和ABP快速框架總體調用通用規則。html
ABP是ASP.NET Boilerplate的簡稱,ABP是一個開源且文檔友好的應用程序框架。ABP不只僅是一個框架,它還提供了一個最徍實踐的基於領域驅動設計(DDD)的體系結構模型。學習使用ABP框架也有一段時間了,一直想全面瞭解下這個框架的整個前因後果,並把想把它使用歷程整理成一個系列出來,不過一直沒有下筆來寫這篇文章的開篇,就是但願可以深刻了解,再深刻了解一些,但願本身可以理解透徹一些,不能誤人子弟,也不想和網上千篇一概的翻譯官網的內容,官網的英文介紹也已經很詳細了,因而我以爲仍是以實際使用的過程進行必定的整理會更好。git
初次瞭解ABP框架,對它仍是很是驚豔的,它基本上是.NET 領域架構的集大成者,幾乎囊括了咱們.NET領域排的上名的各類技術應用,並且它自己能夠支持.net framework和.net core兩種技術流派,對它的介紹也是很是感興趣。github
咱們來大概瞭解下ABP框架涉及到的內容。數據庫
除了這些重要特性外,ABP框架還有不少一些特別的功能或者概念。後端
ABP框架主要仍是基於領域驅動的理念來構建整個架構的,其中領域驅動包含的概念有 域對象Entities、倉儲對象Repositories、域服務接口層Domain Services、域事件Domain Events、應用服務接口Application Services、數據傳輸對象DTOs等。緩存
ABP官方網站:http://www.aspnetboilerplate.com,從裏面能夠查看很詳細的案例和文檔說明,能夠根據須要下載不一樣類型的基礎框架。架構
ABP GitHub源碼地址:https://github.com/aspnetboilerplate,能夠下載整個基礎的框架內容,以及相關的樣板案例代碼。app
基於ABP框架基礎上,咱們整理完善了整個權限體系,以及基於這個基礎上進行的業務系統快速開發,咱們整理後的ABP快速開發框架的架構圖示,以下圖所示(以字典模塊爲例說明)框架
針對Web API接口調用的封裝,爲了適應客戶端快速調用的目的,這個封裝做爲一個獨立的封裝層,以方便各個模塊之間進行共同調用。ide
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組件,使得咱們操做配置內容更加方便和動態化。
12) 附件管理模塊
該模塊實際上是很通用的一個模塊,例如咱們的一些平常記錄,可能會伴隨着有圖片、文檔等的附件管理,若是爲每一個業務對象都作一個附件管理,或者每次開發系統都從新作,那麼效率確定沒有直接採用通用的附件管理那麼方便快捷了。
其實這個模塊是基於個人Winform開發框架開發的,一樣如今的ABP快速開發框架的Winform端依舊可使用這些模塊的界面和大概的處理規則,咱們把它利用ABP框架的獲取數據方式調整一下便可。
首先咱們建立一個獨立的控件,用於放到編輯數據記錄窗口裏面,以下所示。
這樣在項目中集成(如數據編輯窗口),直接拖動這個控件到界面中,運行就能夠看到下面的效果了。
因爲通常建立記錄的時候,給他指定一個GUID的附件組ID,這樣咱們在數據記錄保存前,咱們就能夠上傳附件了,以下所示。
並且在這個過程當中,能夠隨時查看本身在該記錄中已經上傳的附件。若是附件不夠,能夠隨時啓動上傳操做,附件支持多選文件,而後一次性,啓動後臺線程操做方式,把文件上傳及附件記錄保存到數據庫。
因爲是附件管理,所以有可能上傳各類文件,包括Word文檔、Excel文檔、壓縮文件,以及各類類型的圖片,所以爲了方便對圖片的查看,這個控件集成了圖片查看控件,能夠很是方便直接讀取圖片附件的數據流做爲對象展現,該圖片控件支持對圖片的滾動放大縮小、左右翻轉、選擇放大、圖片移動、保存圖片等功能,不須要查看,直接使用ESC退出便可。
附件管理在不少信息化管理系統中很廣泛使用,例如我在病人管理系統界面裏面,能夠在一個界面裏面分門別類管理不少影像學的圖片資料,經過查看附件,能夠看到其中一些圖片附件的縮略圖,須要進一步查看,能夠雙擊圖片便可實現預覽效果。
通用附件管理模塊,就是基於這些特色,實現圖片、Excel文檔、Word文檔和PDF等文檔的在線預覽和管理操做,界面截圖以下所示。
以上就是框架裏面主要的模塊內容展現,固然咱們能夠結合代碼生成工具來快速開發本身的業務管理模塊,而這些主要就是設計好數據庫後,對框架代碼和界面代碼的統一輩子成後進行整合到主體框架裏面便可,能夠得到高效、統1、快速的開發體驗。
詳細的代碼生成工具開發過程,能夠了解隨筆《利用代碼生成工具生成基於ABP框架的代碼 》、《ABP開發框架先後端開發系列---(8)ABP框架之Winform界面的開發過程》
ABP框架代碼生成
最終根據根據選擇數據庫表信息,一鍵生成相關ABP架構分層代碼,文件結構以下所示。
ABP框架的Winform界面開發
設置好後直接生成,代碼工具就能夠依照模板來生成所須要的WInform列表界面和編輯界面的內容了,以下是生成的界面代碼。
放到VS項目裏面,就看到對應的窗體界面效果了。
生成界面後,進行必定的佈局調整就能夠實際用於生產環境了,省卻了不少時間。
系列文章列表以下所示: