Abp v0.18.0 新版本: MVC Module 启动模板
MVC模塊啟動(dòng)模板
可用此模板開(kāi)發(fā)基于模塊開(kāi)發(fā)最佳實(shí)踐和約定的可復(fù)用?應(yīng)用程序模塊?. 它同樣適用于開(kāi)發(fā)微服務(wù).
如何開(kāi)始?
你可以使用ABP CLI創(chuàng)建基于此啟動(dòng)模板的新項(xiàng)目,或者你也可以在入門頁(yè)面創(chuàng)建并下載項(xiàng)目. 在這里我們使用CLI創(chuàng)建新項(xiàng)目.
如果未安裝ABP CLI,第一步是安裝ABP CLI
dotnet tool install -g Volo.Abp.Cli然后使用?abp new?命令在空文件夾中創(chuàng)建新解決方案:
abp new Acme.IssueManagement -t mvc-moduleAcme.IssueManagement?是解決方案的名稱, 如YourCompany.YourProduct. 你可以使用單級(jí)或多級(jí)名稱.
無(wú)用戶界面
默認(rèn)情況模板附帶一個(gè)UI,你可以使用--no-ui選項(xiàng)指定不包含UI層.
abp new Acme.IssueManagement -t mvc-module --no-ui解決方案結(jié)構(gòu)
根據(jù)命令的選項(xiàng),會(huì)創(chuàng)建略有不同的解決方案結(jié)構(gòu). 如果未指定選項(xiàng),你會(huì)得到如下所示的解決方案:
項(xiàng)目組織在src和test和host文件夾中:
src?文件夾包含基于DDD原則分層的實(shí)際模塊.
test?文件夾包含單元和集成測(cè)試.
host?文件夾包含具有不同配置的應(yīng)用程序,用于演示在應(yīng)用程序中如何托管模塊. 這些不是模塊的一部分,但開(kāi)發(fā)時(shí)會(huì)很有用.
下圖展示了模塊的層和項(xiàng)目的依賴關(guān)系:
下面介紹解決方案中的項(xiàng)目及依賴關(guān)系:
.Domain.Shared 項(xiàng)目
項(xiàng)目包含常量,枚舉和其他對(duì)象,這些對(duì)象實(shí)際上是領(lǐng)域?qū)拥囊徊糠?但是解決方案中所有的層/項(xiàng)目中都會(huì)使用到.
例如?IssueType?枚舉和?IssueConts?類 (可能是?Issue?實(shí)體用到的常數(shù)字段,像MaxTitleLength)都適合放在這個(gè)項(xiàng)目中.
該項(xiàng)目不依賴解決方案中的其他項(xiàng)目. 其他項(xiàng)目直接或間接依賴該項(xiàng)目.
.Domain 項(xiàng)目
解決方案的領(lǐng)域?qū)? 它主要包含?實(shí)體, 集合根,?領(lǐng)域服務(wù),?值類型,?倉(cāng)儲(chǔ)接口?和解決方案的其他領(lǐng)域?qū)ο?
例如?Issue?實(shí)體,?IssueManager?領(lǐng)域服務(wù)和?IIssueRepository?接口都適合放在這個(gè)項(xiàng)目中.
它依賴?.Domain.Shared?項(xiàng)目,因?yàn)轫?xiàng)目中會(huì)用到它的一些常量,枚舉和定義其他對(duì)象.
.Application.Contracts 項(xiàng)目
項(xiàng)目主要包含?應(yīng)用服務(wù)?interfaces?和應(yīng)用層的?數(shù)據(jù)傳輸對(duì)象?(DTO). 它用于分離應(yīng)用層的接口和實(shí)現(xiàn). 這種方式可以將接口項(xiàng)目做為約定包共享給客戶端.
例如?IIssueAppService?接口和?IssueCreationDto?類都適合放在這個(gè)項(xiàng)目中.
它依賴?.Domain.Shared?因?yàn)樗赡軙?huì)在應(yīng)用接口和DTO中使用常量,枚舉和其他的共享對(duì)象.
.Application 項(xiàng)目
項(xiàng)目包含?.Application.Contracts?項(xiàng)目的?應(yīng)用服務(wù)?接口實(shí)現(xiàn).
例如?IssueAppService?類適合放在這個(gè)項(xiàng)目中.
它依賴?.Application.Contracts?項(xiàng)目, 因?yàn)樗枰獙?shí)現(xiàn)接口與使用DTO.
它依賴?.Domain?項(xiàng)目,因?yàn)樗枰褂妙I(lǐng)域?qū)ο?實(shí)體,倉(cāng)儲(chǔ)接口等)執(zhí)行應(yīng)用程序邏輯.
.EntityFrameworkCore 項(xiàng)目
這是集成EF Core的項(xiàng)目. 它定義了?DbContext?并實(shí)現(xiàn)?.Domain?項(xiàng)目中定義的倉(cāng)儲(chǔ)接口.
它依賴?.Domain?項(xiàng)目,因?yàn)樗枰脤?shí)體和倉(cāng)儲(chǔ)接口.
如果不需要使用EF Core,可以刪除此項(xiàng)目.
.MongoDB 項(xiàng)目
這是集成MongoDB的項(xiàng)目.
它依賴?.Domain?項(xiàng)目,因?yàn)樗枰脤?shí)體和倉(cāng)儲(chǔ)接口.
如果不需要使用MongoDB,可以刪除此項(xiàng)目.
Test 項(xiàng)目
解決方案有多個(gè)測(cè)試項(xiàng)目,每一層都會(huì)有一個(gè):
.Domain.Tests?用于測(cè)試領(lǐng)域?qū)?
.Application.Tests?用于測(cè)試應(yīng)用層.
.EntityFrameworkCore.Tests?用于測(cè)試EF Core配置與自定義倉(cāng)儲(chǔ).
.MongoDB.Tests?用于測(cè)試MongoDB配置與自定義倉(cāng)儲(chǔ).
.TestBase?所有測(cè)試項(xiàng)目的基礎(chǔ)(共享)項(xiàng)目.
此外,?.HttpApi.Client.ConsoleTestApp?是一個(gè)控制臺(tái)應(yīng)用程序(不是自動(dòng)化測(cè)試項(xiàng)目),它用于演示DotNet應(yīng)用程序中HTTP API的用法.
測(cè)試項(xiàng)目是用于做集成測(cè)試的:
它完全集成到ABP框架和應(yīng)用程序的所有服務(wù).
如果數(shù)據(jù)庫(kù)提供程序是EF Core,測(cè)試項(xiàng)目會(huì)使用SQLite內(nèi)存數(shù)據(jù)庫(kù),如果是MongoDB,它使用Mongo2Go庫(kù).
授權(quán)被禁用,任何的應(yīng)用服務(wù)都可以在測(cè)試中輕松調(diào)用.
你依然可以編寫單元測(cè)試,只不過(guò)它很難寫(因?yàn)槟阈枰獪?zhǔn)備mock/fake對(duì)象),但它的運(yùn)行速度更快(因?yàn)橹粶y(cè)試單個(gè)類并跳過(guò)所有初始化過(guò)程).
領(lǐng)域?qū)雍蛻?yīng)用層測(cè)試使用EF Core. 如果你刪除了EF Core集成項(xiàng)目或者要使用MongoDB測(cè)試這些層,需要手動(dòng)的修改項(xiàng)目引用和依賴.
Host 項(xiàng)目
解決方案中有一些宿主應(yīng)用程序可以在開(kāi)發(fā)時(shí)運(yùn)行模塊. 在開(kāi)發(fā)時(shí)會(huì)很有用. 除了正在開(kāi)發(fā)的模塊外,宿主應(yīng)用程序包括其他模塊:
宿主應(yīng)用程序支持兩種類型的場(chǎng)景.
單體 (統(tǒng)一) 應(yīng)用場(chǎng)景
如果模塊含有UI, 那么?.Web.Unified?應(yīng)用程序于在一個(gè)站點(diǎn)上托管UI和API. 它有自己的?appsettings.json?配置文件(包括數(shù)據(jù)庫(kù)連接字符串)和EF Core數(shù)據(jù)庫(kù)遷移.
.Web.Unified?應(yīng)用程序有一個(gè)名為YourProjectName_Unified的數(shù)據(jù)庫(kù)(本例中名為?IssueManagement_Unified).
如果你選擇了?--no-ui?選項(xiàng), 這個(gè)項(xiàng)目不會(huì)出現(xiàn)在你的解決方案中.
如何運(yùn)行?
將其設(shè)置成啟動(dòng)項(xiàng), 使用包管理控制臺(tái)運(yùn)行?Update-Database?命令遷移數(shù)據(jù)庫(kù),然后運(yùn)行應(yīng)用程序. 默認(rèn)用戶名:?admin?密碼:?1q2w3E*.
分離部署&數(shù)據(jù)庫(kù) 場(chǎng)景
在這個(gè)場(chǎng)景中,有三個(gè)應(yīng)用程序;
.IdentityServer?應(yīng)用程序是其他應(yīng)用程序使用的身份驗(yàn)證服務(wù)器,它有自己的?appsettings.json?包含數(shù)據(jù)庫(kù)連接字符串和其他配置.
.HttpApi.Host?托管模塊的HTTP API. 它有自己的?appsettings.json?包含數(shù)據(jù)庫(kù)連接字符串和其他配置.
.Web.Host?托管模塊的UI. 它包含?appsettings.json?文件, 但是其中沒(méi)有數(shù)據(jù)庫(kù)連接字符串, 因?yàn)樗恍枰B接到數(shù)據(jù)庫(kù), 它主要調(diào)用遠(yuǎn)程API服務(wù)器和身份認(rèn)證服務(wù)器.
下圖展示了應(yīng)用程序的關(guān)系:
.Web.Host?項(xiàng)目使用OpenId Connect身份認(rèn)證從.IdentityServer獲取當(dāng)前用戶的身份和訪問(wèn)令牌. 然后使用訪問(wèn)令牌調(diào)用?.HttpApi.Host. HTTP API 服務(wù)器使用bearer token驗(yàn)證訪問(wèn)令牌獲取當(dāng)前用戶聲明并授權(quán)用戶.
如何運(yùn)行?
你需要按照以下順序運(yùn)行應(yīng)用程序:
首先, 運(yùn)行?.IdentityServer,因?yàn)槠渌麘?yīng)用程序依賴它做身份認(rèn)證.
然后運(yùn)行?.HttpApi.Host,因?yàn)?Web.Host應(yīng)用程序使用API接口.
最后運(yùn)行?.Web.Host?使用用戶名:?admin?密碼:?1q2w3E*?登錄到應(yīng)用程序.
原文地址:https://mp.weixin.qq.com/s/gyVPZgp6SC9NNBC6DLoMug
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總?http://www.csharpkit.com?
總結(jié)
以上是生活随笔為你收集整理的Abp v0.18.0 新版本: MVC Module 启动模板的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#规范整理·泛型委托事件
- 下一篇: 开源题材征集 + MVCEF Core