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

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)

分享創造快樂