使用.NET 6開發TodoList應用(2)——項目結構搭建


系列導航

TodoList需求簡介

首先明確一下我們即將開發的這個TodoList應用都需要完成什么功能,我不會一次性把所有的特性諸如允許用戶登陸之類的需求全部寫上,只是先列出最基本的功能性需求:

  1. 我們可以維護一個TodoList。
  2. TodoList可以包含多個TodoItem。
  3. 對於TodoList,我們可以設置其名稱
  4. 對於每個TodoItem,我們可以設置其內容,超期時間,是否完成。
  5. 對於所有實體,可以完成增刪改查的操作。

開發工具

.NET 6

.NET 6這個沒什么好說的,按照官方說明下載安裝好就可以了。

Visual Studio Code

使用Visual Studio Code的原因是其免費,跨平台,功能足夠用。雖然在智能補全上不如Visual StudioVisual Studio for Mac或者Rider強大,但是因為看這篇文章的你可能用不同的系統,不同的工具,所以我還是決定用所有平台都免費並且表現一致的IDE來進行演示,你可以任選一個自己已有的IDE進行開發。

當然為了順利的使用VScode開發.NET 6 Web API項目,有一些擴展應用也是必須要安裝的,在VSCode的Extension中搜索並安裝以下擴展ID:

  • ms-dotnettools.csharp - 由OmniSharp提供的VSCode開發調試C#項目的必選項。
  • ms-azuretools.vscode-docker - Docker擴展。

Hoppscotch

大家可能對這個工具名字比較陌生,這是用於對Web API項目進行本地測試的工具。大家更熟悉Postman,而這款工具的前身叫做Postwoman,現在更名為Hoppscotch,使用Chrome內核的瀏覽器打開Hoppscotch后可以在地址欄上點擊可用擴展標志,選擇安裝到本地,方便以后使用:

image

打開以后的界面長這樣:

image

功能非常強大,測試Restful接口,GraphQL接口,實時通信接口(WebSocket/SSE/Socket.IO/MQTT)都可以,而且占用資源比Postman要低很多,顏值又高還免費……簡直良心。

Clean Architecture簡介

Clean Architecture是大神Robert C. Martin在自己的博客上發表的一篇關於如何組織應用程序結構和依賴關系來實現更好的獨立、解耦的多層項目結構的方式,推薦大家有時間把這篇文章好好看一下。

經過長久的實踐和演化,目前我個人覺得最簡潔、使用起來最舒服的Clean Architecture結構是這樣的:

image

搭建解決方案結構

# 創建解決方案目錄
mkdir TodoList && cd TodoList

# 創建解決方案
dotnet new sln -n TodoList

# 按照clean architecture的項目結構,創建WebApi項目以及classlib項目
dotnet new webapi -f net6.0 -n TodoList.Api -o ./src/TodoList.Api
dotnet new classlib -f net6.0 -n TodoList.Application -o ./src/TodoList.Application
dotnet new classlib -f net6.0 -n TodoList.Domain -o ./src/TodoList.Domain
dotnet new classlib -f net6.0 -n TodoList.Infrastructure -o ./src/TodoList.Infrastructure

# 按照clean architecture的結構和依賴關系,設置項目間的引用
# Application只依賴於Domain
dotnet add src/TodoList.Application/TodoList.Application.csproj reference src/TodoList.Domain/TodoList.Domain.csproj
# Infrastructure只依賴於Application
dotnet add src/TodoList.Infrastructure/TodoList.Infrastructure.csproj reference src/TodoList.Application/TodoList.Application.csproj
# Api依賴於Application和Infrastructure
dotnet add src/TodoList.Api/TodoList.Api.csproj reference src/TodoList.Application/TodoList.Application.csproj
dotnet add src/TodoList.Api/TodoList.Api.csproj reference src/TodoList.Infrastructure/TodoList.Infrastructure.csproj

# 將所有項目添加到sln上
dotnet sln TodoList.sln add src/TodoList.Api/TodoList.Api.csproj
dotnet sln TodoList.sln add src/TodoList.Application/TodoList.Application.csproj
dotnet sln TodoList.sln add src/TodoList.Domain/TodoList.Domain.csproj
dotnet sln TodoList.sln add src/TodoList.Infrastructure/TodoList.Infrastructure.csproj

運行

在終端定位到當前解決方案目錄里運行:

$ dotnet restore
  Determining projects to restore...
  Restored /Users/yu.li1/Projects/asinta/blogs/cnblogs/TodoList/src/TodoList.Application/TodoList.Application.csproj (in 206 ms).
  Restored /Users/yu.li1/Projects/asinta/blogs/cnblogs/TodoList/src/TodoList.Infrastructure/TodoList.Infrastructure.csproj (in 206 ms).
  Restored /Users/yu.li1/Projects/asinta/blogs/cnblogs/TodoList/src/TodoList.Api/TodoList.Api.csproj (in 306 ms).
  1 of 4 projects are up-to-date for restore.

$ dotnet run --project src/TodoList.Api/TodoList.Api.csproj 
Building...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7039
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5050
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /Users/yu.li1/Projects/asinta/blogs/cnblogs/TodoList/src/TodoList.Api/

使用Hoppscotch使用WebAPI項目自帶的WeatherForecast接口查看項目是否運行成功:

image

項目結構到這里就搭建完成了,我們可以刪除Api項目中的示例WeatherForecast相關的文件,以及三個類庫項目中的Class1.cs文件。最終的項目結構長這樣:

image

我們在后續的文章中會逐漸向其中加入更多的代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM