歡迎光臨
每天分享高質量文章

Abp v0.18.0 新版本: MVC Module 啟動模板

0.18.0將於近期發佈, 本文內容針對於0.18.0版本.

MVC模塊啟動模板

可用此模板開發基於模塊開發最佳實踐和約定的可復用 應用程式模塊 . 它同樣適用於開發微服務.

如何開始?

你可以使用ABP CLI創建基於此啟動模板的新專案,或者你也可以在入門頁面創建並下載專案. 在這裡我們使用CLI創建新專案.

如果未安裝ABP CLI,第一步是安裝ABP CLI

dotnet tool install -g Volo.Abp.Cli

然後使用 abp new 命令在空檔案夾中創建新解決方案:

abp new Acme.IssueManagement -t mvc-module
  • Acme.IssueManagement 是解決方案的名稱, 如YourCompany.YourProduct. 你可以使用單級或多級名稱.

無用戶界面

預設情況模板附帶一個UI,你可以使用--no-ui選項指定不包含UI層.

abp new Acme.IssueManagement -t mvc-module --no-ui

解決方案結構

根據命令的選項,會創建略有不同的解決方案結構. 如果未指定選項,你會得到如下所示的解決方案:

專案組織在srctesthost檔案夾中:

  • src 檔案夾包含基於DDD原則分層的實際模塊.

  • test 檔案夾包含單元和集成測試.

  • host 檔案夾包含具有不同配置的應用程式,用於演示在應用程式中如何托管模塊. 這些不是模塊的一部分,但開發時會很有用.

下圖展示了模塊的層和專案的依賴關係:

下麵介紹解決方案中的專案及依賴關係:

.Domain.Shared 專案

專案包含常量,列舉和其他物件,這些物件實際上是領域層的一部分,但是解決方案中所有的層/專案中都會使用到.

例如 IssueType 列舉和 IssueConts 類 (可能是 Issue 物體用到的常數欄位,像MaxTitleLength)都適合放在這個專案中.

  • 該專案不依賴解決方案中的其他專案. 其他專案直接或間接依賴該專案.

.Domain 專案

解決方案的領域層. 它主要包含 物體, 集合根, 領域服務, 值型別, 倉儲接口 和解決方案的其他領域物件.

例如 Issue 物體, IssueManager 領域服務和 IIssueRepository 接口都適合放在這個專案中.

  • 它依賴 .Domain.Shared 專案,因為專案中會用到它的一些常量,列舉和定義其他物件.

.Application.Contracts 專案

專案主要包含 應用服務 interfaces 和應用層的 資料傳輸物件 (DTO). 它用於分離應用層的接口和實現. 這種方式可以將接口專案做為約定包共享給客戶端.

例如 IIssueAppService 接口和 IssueCreationDto 類都適合放在這個專案中.

  • 它依賴 .Domain.Shared 因為它可能會在應用接口和DTO中使用常量,列舉和其他的共享物件.

.Application 專案

專案包含 .Application.Contracts 專案的 應用服務 接口實現.

例如 IssueAppService 類適合放在這個專案中.

  • 它依賴 .Application.Contracts 專案, 因為它需要實現接口與使用DTO.

  • 它依賴 .Domain 專案,因為它需要使用領域物件(物體,倉儲接口等)執行應用程式邏輯.

.EntityFrameworkCore 專案

這是集成EF Core的專案. 它定義了 DbContext 並實現 .Domain 專案中定義的倉儲接口.

  • 它依賴 .Domain 專案,因為它需要取用物體和倉儲接口.

如果不需要使用EF Core,可以刪除此專案.

.MongoDB 專案

這是集成MongoDB的專案.

  • 它依賴 .Domain 專案,因為它需要取用物體和倉儲接口.

如果不需要使用MongoDB,可以刪除此專案.

Test 專案

解決方案有多個測試專案,每一層都會有一個:

  • .Domain.Tests 用於測試領域層.

  • .Application.Tests 用於測試應用層.

  • .EntityFrameworkCore.Tests 用於測試EF Core配置與自定義倉儲.

  • .MongoDB.Tests 用於測試MongoDB配置與自定義倉儲.

  • .TestBase 所有測試專案的基礎(共享)專案.

此外, .HttpApi.Client.ConsoleTestApp 是一個控制台應用程式(不是自動化測試專案),它用於演示DotNet應用程式中HTTP API的用法.

測試專案是用於做集成測試的:

  • 它完全集成到ABP框架和應用程式的所有服務.

  • 如果資料庫提供程式是EF Core,測試專案會使用SQLite記憶體資料庫,如果是MongoDB,它使用Mongo2Go庫.

  • 授權被禁用,任何的應用服務都可以在測試中輕鬆呼叫.

你依然可以編寫單元測試,只不過它很難寫(因為你需要準備mock/fake物件),但它的運行速度更快(因為只測試單個類並跳過所有初始化過程).

領域層和應用層測試使用EF Core. 如果你刪除了EF Core集成專案或者要使用MongoDB測試這些層,需要手動的修改專案取用和依賴.

Host 專案

解決方案中有一些宿主應用程式可以在開發時運行模塊. 在開發時會很有用. 除了正在開發的模塊外,宿主應用程式包括其他模塊:

宿主應用程式支持兩種型別的場景.

單體 (統一) 應用場景

如果模塊含有UI, 那麼 .Web.Unified 應用程式於在一個站點上托管UI和API. 它有自己的 appsettings.json 配置檔案(包括資料庫連接字串)和EF Core資料庫遷移.

.Web.Unified 應用程式有一個名為YourProjectName_Unified的資料庫(本例中名為 IssueManagement_Unified).

如果你選擇了 --no-ui 選項, 這個專案不會出現在你的解決方案中.

如何運行?

將其設置成啟動項, 使用包管理控制台運行 Update-Database 命令遷移資料庫,然後運行應用程式. 預設用戶名: admin 密碼: 1q2w3E*.

分離部署&資料庫 場景

在這個場景中,有三個應用程式;

  • .IdentityServer 應用程式是其他應用程式使用的身份驗證服務器,它有自己的 appsettings.json 包含資料庫連接字串和其他配置.

  • .HttpApi.Host 托管模塊的HTTP API. 它有自己的 appsettings.json 包含資料庫連接字串和其他配置.

  • .Web.Host 托管模塊的UI. 它包含 appsettings.json 檔案, 但是其中沒有資料庫連接字串, 因為它不需要連接到資料庫, 它主要呼叫遠程API服務器和身份認證服務器.

下圖展示了應用程式的關係:

.Web.Host 專案使用OpenId Connect身份認證從.IdentityServer獲取當前用戶的身份和訪問令牌. 然後使用訪問令牌呼叫 .HttpApi.Host. HTTP API 服務器使用bearer token驗證訪問令牌獲取當前用戶宣告並授權用戶.

如何運行?

你需要按照以下順序運行應用程式:

  • 首先, 運行 .IdentityServer,因為其他應用程式依賴它做身份認證.

  • 然後運行 .HttpApi.Host,因為.Web.Host應用程式使用API接口.

  • 最後運行 .Web.Host 使用用戶名: admin 密碼: 1q2w3E* 登錄到應用程式.

原文地址:https://mp.weixin.qq.com/s/gyVPZgp6SC9NNBC6DLoMug


.NET社區新聞,深度好文,歡迎訪問公眾號文章彙總 http://www.csharpkit.com 

赞(0)

分享創造快樂