ABP是一個開源應用程序框架,專注於基於ASP.NET Core的Web應用程序開發,但也支持開發其他類型的應用程序.ABP整合了.net開發中的各種技術
文檔:https://docs.abp.io/zh-Hans/abp/latest/Getting-Started
新版的ABP需要依賴.NET 6的環境,需要先安裝對應的SDK
一.安裝ABP
dotnet tool install -g Volo.Abp.Cli
二.創建項目
這里使用ABP CLI來進行創建
abp new ABP.Demo -u mvc -d ef -dbms MySQL -o "D:\ABPDemo"
new的常用命令
--output-folder
或者-o
: 指定輸出文件夾,默認是當前目錄.--ui
或者-u
: 指定ui框架.默認mvc
框架.其他選項 (mvc、angular、blazor、none)--database-provider
或者-d
: 指定數據庫提供程序.默認是ef
.其他選項(ef、mongodb)- -dbms:指定數據庫類型
三.生成的代碼結構
項目結構
項目組織在src
和test
文件夾中. src
文件夾包含實際應用程序,該應用程序基於前面提到的DDD原則進行分層. 下圖展示了解決方案的層和項目的依賴關系:
-
Domain.Shared 項目
- 項目包含常量,枚舉和其他對象,這些對象實際上是領域層的一部分,但是解決方案中所有的層/項目中都會使用到.
- 該項目不依賴解決方案中的其他項目. 其他項目直接或間接依賴該項目
-
Domain 項目
- 解決方案的領域層. 它主要包含 實體, 集合根, 領域服務, 值類型, 倉儲接口 和解決方案的其他領域對象.
- 它依賴
.Domain.Shared
項目,因為項目中會用到它的一些常量,枚舉和定義其他對象.
-
Application.Contracts 項目
- 項目主要包含 應用服務 interfaces 和應用層的 數據傳輸對象 (DTO). 它用於分離應用層的接口和實現. 這種方式可以將接口項目做為約定包共享給客戶端.
- 它依賴
.Domain.Shared
因為它可能會在應用接口和DTO中使用常量,枚舉和其他的共享對象.
-
Application 項目
- 項目包含
.Application.Contracts
項目的 應用服務 接口實現. - 它依賴
.Application.Contracts
項目, 因為它需要實現接口與使用DTO. - 它依賴
.Domain
項目,因為它需要使用領域對象(實體,倉儲接口等)執行應用程序邏輯.
- 項目包含
-
.EntityFrameworkCore 項目
- 這是集成EF Core的項目. 它定義了
DbContext
並實現.Domain
項目中定義的倉儲接口. - 它依賴
.Domain
項目,因為它需要引用實體和倉儲接口.
- 這是集成EF Core的項目. 它定義了
-
.EntityFrameworkCore.DbMigrations 項目
- 包含解決方案的EF Core數據庫遷移. 它有獨立的
DbContext
來專門管理遷移.(ABP是一個模塊化的框架,理想的設計是讓每個模塊都有自己的DbContext
類. 這時用於遷移的DbContext
就會發揮作用. 它將所有的DbContext
配置統一到單個模型中以維護單個數據庫的模式. 對於更高級的場景,可以程序可以擁有多個數據庫(每個數據庫有一個或多個模塊表)和多個遷移DbContext
(每個都維護不同的數據庫模式)) - 它依賴
.EntityFrameworkCore
項目,因為它重用了應用程序的DbContext
配置 .
- 包含解決方案的EF Core數據庫遷移. 它有獨立的
-
.DbMigrator 項目
- 必要時創建數據庫(沒有數據庫時).
- 應用未遷移的數據庫遷移.
- 初始化種子數據(當你需要時).
- 它依賴
.EntityFrameworkCore.DbMigrations
項目 (針對EF Core),因為它需要訪問遷移文件. - 它依賴
.Application.Contracts
項目,因為它需要訪問權限定義在初始化種子數據時為管理員用戶賦予所有權限.
-
.HttpApi 項目
- 用於定義API控制器.
- 它依賴
.Application.Contracts
項目,因為它需要注入應用服務接口.
-
.HttpApi.Client 項目
- 定義C#客戶端代理使用解決方案的HTTP API項目. 可以將上編輯共享給第三方客戶端,使其輕松的在DotNet應用程序中使用你的HTTP API(其他類型的應用程序可以手動或使用其平台的工具來使用你的API).
- 它依賴
.Application.Contracts
項目,因為它需要使用應用服務接口和DTO.
-
.Web 項目
-
包含應用程序的用戶界面(UI).如果使用ASP.NET Core MVC UI, 它包括Razor頁面,javascript文件,樣式文件,圖片等...包含應用程序主要的
appsettings.json
配置文件,用於配置數據庫連接字符串和應用程序的其他配置 - 依賴
.HttpApi
項目,因為UI層需要使用解決方案的API和應用服務接口.
-
-
Test 項目
-
.Domain.Tests
用於測試領域層..Application.Tests
用於測試應用層..EntityFrameworkCore.Tests
用於測試EF Core配置與自定義倉儲..Web.Tests
用於測試UI(適用於ASP.NET Core MVC UI)..TestBase
所有測試項目的基礎(共享)項目.