鍵.png)
ASP.NET Web API快速入門介紹
基于DDD的四層架構(gòu):用戶接口層、應(yīng)用層、領(lǐng)域?qū)雍突A(chǔ)設(shè)施層,如下圖所示:
與傳統(tǒng)的三層架構(gòu)相比DDD的分層架構(gòu)將業(yè)務(wù)邏輯層拆為了應(yīng)用層與領(lǐng)域?qū)?/p>
下方左圖為傳統(tǒng)四層架構(gòu),右圖為依賴倒置后的四層架構(gòu)。應(yīng)用層與領(lǐng)域?qū)犹峁┙涌冢A(chǔ)設(shè)施層提供實(shí)現(xiàn)。
領(lǐng)域?qū)硬灰蕾嚾魏我粚樱粚W⑴c業(yè)務(wù)。個(gè)人認(rèn)為基礎(chǔ)設(shè)施層迭代頻率要低于接口層,抽象程度高于表現(xiàn)層。所以讓表現(xiàn)層依賴基礎(chǔ)設(shè)施層更合適。
我的本系列博客對(duì)應(yīng)的項(xiàng)目也是基于DDD的架構(gòu)思想,當(dāng)然也會(huì)加入自己的一些想法在其中。
想學(xué)習(xí)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的同學(xué)可移步《DDD 實(shí)戰(zhàn)課》
整體項(xiàng)目結(jié)構(gòu)如下方三張圖所示:
1、ICore.WebApi
這一層主要構(gòu)建 RESTful 應(yīng)用程序,提供HTTP服務(wù)。管道中間件、過濾器、跨域、路由、模型驗(yàn)證等都在此配置。
2、ICore.Application
這一層很薄,不會(huì)包含任何與業(yè)務(wù)有關(guān)的邏輯信息,將使用CQRS的設(shè)計(jì)模式。安全認(rèn)證、權(quán)限校驗(yàn)、事務(wù)控制、發(fā)送或訂閱領(lǐng)域事件等都可在此層做處理。
3、ICore.Task
這一層主要用于處理系統(tǒng)內(nèi)小型定時(shí)任務(wù)。繁多、復(fù)雜的定時(shí)任務(wù)建議用第三方調(diào)度平臺(tái),例如:XXL-JOB。
4、ICore.Domain.Core
這一層主要用于實(shí)現(xiàn)核心的業(yè)務(wù)邏輯!內(nèi)部主要包含Entity(實(shí)體)、Domain Event(領(lǐng)域事件)、Domain Service(領(lǐng)域服務(wù))等。
5、ICore.Domain.Abstractions
這一層主要用于定義一些基類的接口和領(lǐng)域事件的接口。例如:IAggregateRoot聚合根接口、IEntity、IEntity< TKey> 實(shí)體接口等。
6、ICore.Infrastructure.Core
這一層主要對(duì)整個(gè)應(yīng)用程序提供基礎(chǔ)實(shí)現(xiàn),例如倉儲(chǔ)的實(shí)現(xiàn)、工作單元模式的實(shí)現(xiàn)、Redis緩存、隊(duì)列服務(wù)等。
7、ICore.Test
這一層主要用于對(duì)整個(gè)程序的單元測(cè)試,減少不必要的BUG以及提高測(cè)試效率。
我強(qiáng)烈建議大家看阿里巴巴Java開發(fā)手冊(cè),以上面的規(guī)范來約束自己的編碼。
首先.Net Core同Spring Boot一樣都是自宿主程序,其不是必需在IIS內(nèi)部托管。實(shí)現(xiàn)跨平臺(tái)離不開.Net Core內(nèi)置的kestrel高性能服務(wù)器,如下圖所示(圖片來自官網(wǎng)):
1、在launchSettings.json
文件中修改站點(diǎn)信息,把IIS Express節(jié)點(diǎn)刪掉
2、在appsettings.json
中設(shè)置啟動(dòng)端口
"Kestrel": {
"Endpoints": {
"Https": {
"Url": "https://*:8000"
},
"Http": {
"Url": "http://*:8001"
}
}
}
3、在Program
中設(shè)置啟動(dòng)端口
從.NET 6.0開始已去除了Startup.cs 文件,依賴注入服務(wù)和Middleware全在Program.cs中配置。
我從寫.NET Core 2.0開始一直到現(xiàn)在,Startup.cs文件我覺得還是有必要存在,個(gè)人使用習(xí)慣而已
using ICore.WebApi;
var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);
startup.Configure(builder.Build());
namespace ICore.WebApi
{
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration) => Configuration = configuration;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
services.AddEndpointsApiExplorer();
services.AddSwaggerGen();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(WebApplication app)
{
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run("http://*:8001");
}
}
}
使用命令行啟動(dòng)dotnet ICore.WebApi.dll –urls=”http://*:8001″ –ip=”127.0.0.1″ –port=8001
這一節(jié)就到這里,后面會(huì)繼續(xù)上新!
文章轉(zhuǎn)自微信公眾號(hào)@DotNet
ASP.NET Web API快速入門介紹
2024年在線市場(chǎng)平臺(tái)的11大最佳支付解決方案
完整指南:如何在應(yīng)用程序中集成和使用ChatGPT API
選擇AI API的指南:ChatGPT、Gemini或Claude,哪一個(gè)最適合你?
用ASP.NET Core 2.1 建立規(guī)范的 REST API — 緩存和并發(fā)
企業(yè)工商數(shù)據(jù)API用哪種?
2024年創(chuàng)建社交媒體帖子的最佳圖像工具API
2024年小型企業(yè)的7個(gè)最佳短信應(yīng)用API
用gin寫簡(jiǎn)單的crud后端API接口
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)