0%

[DotnetCore]CleanArchitecture手做系列-建立專案

前提情要

筆者這篇主要是以https://github.com/jasontaylordev/CleanArchitecture的`template`架構,因`template`產出之專案結構包含`Identity Server,還有前端頁面等不需要的專案,因此筆者想要仿照該template架構,自己手動建立純API架構,順便熟悉一下其Clean Architecture`的專案結構,才能知己知彼,百戰百勝阿。此篇就以筆者手動建立的過程,筆者懶得截圖,主要以指令碼的方式進行相關建置作業。

內容

筆者這邊使用指令的方式手動建立相關專案及相依性並安裝套件,並使用Visual Studio Code撰寫其內容,一開始不免俗地放一張筆者參考的template專案的架構圖

https://i0.wp.com/jasontaylor.dev/wp-content/uploads/2020/01/Figure-01-2.png?w=531&ssl=1

建立專案

跟著筆者一起建立相關專案吧

1
2
3
4
5
6
7
mkdir Test.CleanArch
cd Test.CleanArch\
dotnet new webapi -o Test.CleanArch.API
dotnet new classlib -o Test.CleanArch.Application
dotnet new classlib -o Test.CleanArch.Domain
dotnet new classlib -o Test.CleanArch.Infrastructure
dotnet new sln -n Test.CleanArch

方案檔設定

建立完專案及方案檔後,針對方案檔及專案設定對應,這樣之後想要使用Visual Studio開起來,雖然筆者這邊示範使用Visual Studio Code,筆者還是示範一下這個步驟

1
2
3
4
dotnet sln Test.CleanArch.sln add Test.CleanArch.API\Test.CleanArch.API.csproj
dotnet sln Test.CleanArch.sln add Test.CleanArch.Application\Test.CleanArch.Application.csproj
dotnet sln Test.CleanArch.sln add Test.CleanArch.Domain\Test.CleanArch.Domain.csproj
dotnet sln Test.CleanArch.sln add Test.CleanArch.Infrastructure\Test.CleanArch.Infrastructure.csproj

加入參考

接著要來設定專案之間的參考,這邊簡單解釋一下規則,以Clean Architecture的洋蔥式架構來說,相依性是非常重要的,相依的順序有內而外,因此最外層的API專案參考InfrastructureApplication專案,以此類推

1
2
3
4
5
6
7
8
9
10
# Test.CleanArch.API
cd Test.CleanArch.API\
dotnet add reference ..\Test.CleanArch.Application\Test.CleanArch.Application.csproj
dotnet add reference ..\Test.CleanArch.Infrastructure\Test.CleanArch.Infrastructure.csproj
# Test.CleanArch.Infrastructure
cd Test.CleanArch.Infrastructure\
dotnet add reference ..\Test.CleanArch.Application\Test.CleanArch.Application.csproj
# Test.CleanArch.Application
cd Test.CleanArch.Application\
dotnet add reference ..\Test.CleanArch.Domain\Test.CleanArch.Domain.csproj

安裝套件

Domain專案

筆者這邊使用SqlSuage當作ORM,相較於原本的template是使用EFCore,宣告與引用上有所不同,Domain這邊會宣告SqlSugar對應的實體,會套上SqlSugarCore特有的Attribute,因此必須安裝SqlSugarCore套件

1
2
cd Test.CleanArch.Domain\
dotnet add package SqlSugarCore

Application專案

Application專案屬整個專案制定規格的地方,因此安裝套件有點多,筆者這邊除了SqlSugar外,其他沿用template預設標配的相關套件

  • MediatR
  • AutoMapper
  • FluentValidation

因此需要安裝相關的套件

1
2
3
4
5
cd Test.CleanArch.Application\
dotnet add package SqlSugarCore
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection
dotnet add package FluentValidation.DependencyInjectionExtensions
dotnet add package MediatR.Extensions.Microsoft.DependencyInjection

Infrastructure專案

Infrastructure專案這邊,放置非Domain相關的實作,類似像Excel相關的操作,會將定義放在Application專案中,實作則於此專案中實作,接著SqlSugar相關注入宣告也是在於此,因此必須要從appsettings中讀取相關的設定

1
2
cd Test.CleanArch.Infrastructure\
dotnet add package Microsoft.Extensions.Configuration

檔案結構

按照筆者上述講的方式宣告、建置完成後,會長出以下檔案結構目錄,筆者為截圖方便,使用Visual Studio 2022開啟後,看出專案相依性及安裝套件列表

結論

這篇就以建立專案,專案參考及安裝套件為主,下篇筆者以SqlSugarCore為例,做一個以MediatRIn-process messaging方式完成商業邏輯的撰寫。

參考