Abp vNext
簡介
Abp vNext 是Abp新開源項目和原來的 Abp 是分開單獨的項目,之所以新開是因為現在的這個版本是純潔.Net Core版本、完全模塊化的版本,現在最新版本是V3.0.4,源碼在 github.com。其實現在我們將Abp 基本都是講的Abp vNext.
他比以前的版本更精致,顆粒更小,開發者的選擇跟多!雖然他是集成了許多種最佳實踐的套件,但是他每一個小的模塊功能都是能單獨拿來使用的!
而且現在更新的頻率也很高,所有的bug、建議、問題很快得到響應,讓這個項目成長的跟快,更成熟!
當然新項目也是支持多租戶的,不同租戶的數據相互隔離,進行編碼的時候完全感受不到多租戶的存在。
具體的在官網有詳細介紹 特點 下面簡單羅列下
特點
- CLI 支持命令行
# Create a new layered application
abp new Acme.BookStore
# Create a new layered application using MongoDB
abp new Acme.BookStore -d mongodb
# Add a new module to the solution
abp add-module Volo.Blogging
- 模塊化 & 微服務兼容 (.Net Core 本來就是一個模塊的設計思路)
這里簡單說下 模塊是偏向邏輯和抽象的一個東西,而組件是一個偏實現的東西。怎么說呢?
一個dll是個組件,Java里就是一個jar包;比如微信功能做一個模塊,這個微信模塊里面可能就用了很多個組件
繼承AbpModule就可以寫自己的模塊了
public class BlogModule : AbpModule
{
}
-
實現大部分日常需要的橫向功能 如:授權、驗證、異常、緩存、審計日志、事務管理等等
-
多租戶
-
虛擬文件系統
-
DDD 領域驅動設計
-
支持替換 DI (ABP vNext 默認使用的是 Autofac 有些高級應用需要,建議就用默認)
-
Http Apis & 動態代理
-
主題皮膚的支持
-
文檔是有中文的
當然建議看英文的,因為是翻譯,翻譯就有好有壞嘛
簡單總結:
-
快
快速搭建 -
穩
從.NET Framework 開始很多年的沉淀,單元測試覆蓋全面 -
全
如果你的開發團隊在100人一下,我覺得如果自己去找輪子的話,費時費力不說而且很有可能還沒有Abp做的更全面還堅固擴展性、靈活性,以及他由單體轉微服務的話都不用做代碼遷移!
學習質料
-
國內團隊打造的Abp模塊開發項目,現在有很多如 微信、cms、商城、各種Sdk 等等的實現 https://github.com/EasyAbp
其實Abp的基礎知識不用過多的研究,他都是Core的一些封裝抽象,多實踐,加上閱讀源碼就可以了。
難點和重點是模塊開發、Api動態代理、DDD、數據訪問這些點。
這是個實戰系列就不過多討論理論的東西了,現在直接到主題就是實踐。
環境
IDE隨意,vscode、Visual Studio、vim 這里說的是這個系列我這里的環境:
-
Windows 10
-
Visual Studio 2019 版本16.6.4
-
Microsoft Edge 基於 Chromium ,完全不必擔心用Google Chrome 是一樣的,個人覺得Edge好用
-
Windows Terminal 用這個把CMD換掉吧,又好看又好用!
開始
新建項目的方式
第一種:vs 建項目,手動添加項目和 Abp 的 Nuget
第二種:Create New Project 點開:選擇 Direct Download 這個Tab,填完項目名稱等后 點擊 Create now 就會把創建好的項目下載下來了
第三種:推薦這種方式 CLI 命令行創建
- 安裝Abp CLI 工具
#安裝
dotnet tool install -g Volo.Abp.Cli
#更新升級
dotnet tool update -g Volo.Abp.Cli
創建項目
Abp 項目有三種 Application、Module、Console 我們這里先做一個完整的項目選擇Application 他們各種的 用途 在這里有解釋。可以先簡單理解:Application 是一個完整的帶Web的項目; Module 開發模塊,服務的項目;Console 就是控制台程序。
使用第二和第三種創建方式都會生成一樣的文件:
這里以項目名 CLI形式、DG.Blog項目名 為例
PS C:\Users\huang\OneDrive\doc\abp> abp new DG.Blog
[16:41:24 INF] ABP CLI (https://abp.io)
[16:41:25 INF] Version 3.0.4 (Stable channel)
[16:41:26 INF] Creating your project...
[16:41:26 INF] Project name: DG.Blog
[16:41:26 INF] Mobile App: ReactNative
[16:41:26 INF] Output folder: C:\Users\huang\OneDrive\doc\abp\DG.Blog
[16:41:30 INF] Using cached template: app, version: 3.0.4
[16:41:32 INF] Check out the documents at https://docs.abp.io/en/abp/latest/Startup-Templates/Application
[16:41:34 INF] 'DG.Blog' has been successfully created to 'C:\Users\huang\OneDrive\doc\abp\DG.Blog'
生成successfully了,打開目錄看下有兩個文件夾:
aspnet-core 和 react-native
react-native 是移動端的我們主要看aspnet-core這個文件夾:
│ .gitattributes
│ .gitignore
│ common.props
│ DG.Blog.sln
│ DG.Blog.sln.DotSettings
├───src
│ ├───DG.Blog.Application
│ ├───DG.Blog.Application.Contracts
│ ├───DG.Blog.DbMigrator
│ ├───DG.Blog.Domain
│ ├───DG.Blog.Domain.Shared
│ ├───DG.Blog.EntityFrameworkCore
│ ├───DG.Blog.EntityFrameworkCore.DbMigrations
│ ├───DG.Blog.HttpApi
│ ├───DG.Blog.HttpApi.Client
│ └───DG.Blog.Web
└───test
├───DG.Blog.Application.Tests
├───DG.Blog.Domain.Tests
├───DG.Blog.EntityFrameworkCore.Tests
├───DG.Blog.HttpApi.Client.ConsoleTestApp
├───DG.Blog.TestBase
└───DG.Blog.Web.Tests
VS 打開 DG.Blog.sln
打開是這樣的
項目分層就可以看出是按照DDD來分的
-
Domain.Shared 項目
解決方案的領域層. 它主要包含 實體, 集合根, 領域服務, 值類型, 倉儲接口 和解決方案的其他領域對象.
實體和 Repository 接口都放在這個項目中.
依賴 Domain.Shared 項目,因為項目中會用到它的一些常量,枚舉和定義其他對象. -
Application 項目
項目包含 Application.Contracts 項目的 應用服務 接口實現.
依賴 Application.Contracts 項目,需要實現接口與使用DTO.
依賴 Domain 項目,使用領域對象(實體,倉儲接口等)執行應用程序邏輯. -
Application.Contracts 項目
項目包含 應用服務 接口、應用層的DTO. 它用於分離應用層的接口和實現. 這樣就可以把契約共享出去成為系統的標准.
依賴 Domain.Shared 因為會在應用接口和DTO中使用常量,枚舉和其他的共享對象。 -
EntityFrameworkCore 項目
集成EF Core的項目. 定義DbContext 和實現Domain 項目中定義的倉儲接口.
依賴 Domain 項目,引用實體和倉儲接口.
我們這里都是默認配置生成的(abp new DG.Blog),所以有EF Core,他不是必須或一定出現的項目
-
EntityFrameworkCore.DbMigrations 項目
EF Core數據庫遷移. 獨立的 DbContext (僅用於數據庫遷移)進行遷移動作.
依賴 .EntityFrameworkCore 項目,用應用程序的 DbContext 配置 -
DbMigrator 項目
控制台應用程序,有單獨的 appsettings.json 文件. 記得配置更改.
依賴 EntityFrameworkCore.DbMigrations 項目 訪問遷移文件.
依賴 Application.Contracts 項目. -
HttpApi 項目
定義API控制器.(Abp會自動動態創建,有需要另外實現的可在此項目中實現)
依賴 Application.Contracts 項目,注入應用服務接口. -
HttpApi.Client 項目
客戶端代理使用的HTTP API項目.
ABP動態 C# API 客戶端功能,你不需要手動的創建C#客戶端代理,除非你有單獨的需求.
依賴 .Application.Contracts 項目,使用應用服務接口和DTO. -
Web 項目
用戶界面(UI).ASP.NET Core MVC UI, 或者Angular
依賴 HttpApi 項目,使用API和應用服務接口 -
Test 項目
這個自然是測試
下一章 我們開始配置數據庫,遷移,讓這個項目跑起來!