Abp vNext 實戰 - 1簡介建項目


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的基礎知識不用過多的研究,他都是Core的一些封裝抽象,多實踐,加上閱讀源碼就可以了。
難點和重點是模塊開發、Api動態代理、DDD、數據訪問這些點。

這是個實戰系列就不過多討論理論的東西了,現在直接到主題就是實踐。

環境

IDE隨意,vscode、Visual Studio、vim 這里說的是這個系列我這里的環境:

開始

新建項目的方式

第一種: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 項目
    這個自然是測試


下一章 我們開始配置數據庫,遷移,讓這個項目跑起來!


免責聲明!

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



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