基於ABP開發框架的技術點分析和項目快速開發實現


在我們開發各種項目應用的時候,往往都是基於一定框架進行,同時配合專用的代碼生成工具,都是為了快速按照固定模式開發項目,事半功倍,本篇隨筆對基於ABP開發框架的技術點進行分析和ABP框架項目快速開發實現進行介紹,拋磚引玉的對我們技術人員的日常技術工作進行一定的總結,希望大家不吝支持。

1、ABP開發框架的項目開發

下面對ABP框架的數據庫支持、管理端界面、功能模塊划分、ABP框架特點、模塊開發支持等方面進行介紹,如下圖所示。

我們知道,一般我們開發某個項目的時候,往往都會關注項目默認支持的數據庫,以及后續能夠支持的一些數據庫,對於一般的應用,當然是希望它能夠支持多種數據庫。

 

對於ABP框架來說,它的底層是基於.netcore的Entity Framework Core ,它對於常規的數據庫基本上都是支持的,如下所示。

 

 關於ABP框架使用Oracle數據庫及數據庫的遷移,可以參考我的隨筆《ABP框架使用Oracle數據庫,並實現從SQLServer中進行數據遷移的處理

 關於ABP框架使用Mysql數據庫及數據庫的遷移,可以參考我的隨筆《ABP框架使用Mysql數據庫,以及基於SQLServer創建Mysql數據庫的架構和數據

現在框架基本上都是多端應用的了,所以在ABP框架中整合Winform管理端、Vue&element的BS前端,以及公司動態網站用於發布產品和網站信息等都是常見的應用,有時候,我們還需要根據功能的需要,增加一些小程序的支持,這些對於Web API后端來說,都是很容易接入的應用處理。

 

Winform應用端,其實很多時候是很必要的,提供眾多豐富的功能展示,以及很好的用戶交互能力,特別在對接硬件或者打印處理的時候。

和我們的Winform框架一樣,Winform應用端提供封裝良好的框架組件模塊,包括權限系統、字典模塊、附件管理模塊、自動升級、分頁控件、公用類庫及界面基類模塊等模塊。 

而基於Vue + Element 的前端界面,和基於Winform的ABP框架一樣,使用同一個API后端,模塊包括用戶管理、組織機構管理、角色管理、菜單管理、功能管理及權限分配,日志管理、字典管理、產品管理等管理功能,可實現用戶的功能及數據權限進行控制管理。

公司動態門戶網站,有時候用於我們發布網站信息和產品信息的一個門戶網站,采用了Bootstrap-Vue界面組件,由於大多數門戶網站都是基於Bootstrap柵格系統的,因此基於最新Bootstrap-Vue界面組件也就是最佳選擇的了,而且可以重用很多Bootstrap的網站模板案例。這樣也同時保持了前端模塊同時也是基於Vue的,摒棄了以前基於JQuery的繁瑣操作DOM處理。

 

有了這些管理端,基本上也就滿足了大部分的需求,不過由於現在微信小程序的廣泛應用,有時候我們針對一些業務模塊功能,可以根據需要推出一些小程序應用場景,這些對接我們的統一授權系統,以及統一的WebAPI調用機制即可滿足。

前面介紹了,基於ABP開發框架的Winform端、Vue&Element前端,都整合了很多常規的模塊,如權限、字典、附件等常見的模塊,這些既可以是系統性的管理模塊,也是基礎性數據的支撐,同時也會提供眾多組件給我們應用模塊進行使用的。

而我們在框架提供這些內容外,都需要根據具體業務的需要,按照框架的架構、編碼標准要求,增量式的開發一些業務模塊界面,一般最好的清空下是借助輔助工具的使用,能夠節省大量的時間,同時降低難度,事半功倍。

2、ABP框架的代碼生成

借助我們ABP框架的定制代碼生成工具Database2sharp,可以對Winform界面開發、Vue&Element界面開發、ABP框架后端代碼進行全棧式的開發處理。

 

 Database2sharp它通過整合框架相關的生成規則,我們可以增加對應的ABP框架后端代碼的生成,如下代碼生成工具界面所示。

Database2Sharp關於ABP框架的Winform界面配置如下界面所示,可以定制化的生成Winform界面代碼。

在代碼生成工具Database2Sharp界面里面,選擇【代碼生成】【ABP的Vue+Element界面代碼】,如下所示。

確認生成代碼后,我們可以看到對應的API調用JS類和Vue視圖文件,如下所示。

 

 

3、ABP框架的特點

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層使用。

一般來說,對於數據庫的操作,用標准倉儲模式處理就可以了,而且我們基於框架的基類封裝,可以減少很多標准的處理代碼,只需要簡單繼承一下關系即可。

其中基類MyAsyncServiceBase 已經封裝了常見的數據庫操作處理。

而這個MyAsyncServiceBase 構造函數包含了相關的DTO對象,方便用於整個對象接口的處理,如查詢條件、返回對象DTO、領域對象、主鍵類型等等。

如果不需要其他業務對象的操作,那么就保留默認的倉儲對象即可,如果需要使用其他業務對象處理,那么同時引入,並在構造函數中注入所需的倉儲對象,如下面所示。

 

 一般來說,這些集成關系,我們在利用代碼生成工具生成代碼的時候,都已經完全處理好的了,各層的關系也都一一生成。

它主要是分為下面幾個項目分層。

Core領域核心層,領域層就是業務層,是一個項目的核心,所有業務規則都應該在領域層實現。這個項目里面,除了定義所需的領域實體類外,其實可以定義我們自己的自定義的倉儲對象(類似DAL/IDAL),以及定義自己的業務邏輯層(類似BLL/IBLL),以及基於AutoMapper映射規則等內容。

EntityFrameworkCore 實體框架核心層,這個項目不需要修改太多內容,只需要在DbContext里面加入對應領域對象的倉儲對象即可。

Application.Common和Application應用層:應用層提供一些應用服務(Application Services)方法供展現層調用。一個應用服務方法接收一個DTO(數據傳輸對象)作為輸入參數,使用這個輸入參數執行特定的領域層操作,並根據需要可返回另一個DTO。

Web.Core Web核心層,基於Web或者Web API的核心層,提供了對身份登陸驗證的基礎處理,沒有其他內容。

Web.Core.Host Web API的宿主層,也是動態發布Web API的核心內容,另外在Web API里面整合了Swagger,使得我們可以方便對Web API的接口進行調試。

Migrator數據遷移層,這個是一個輔助創建的控制台程序項目,如果基於DB First,我們可以利用它來創建我們項目的初始化數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM