Contents

Visual Studio 做 Net Core 專案分層

什麼是程式分層呢?在平常我們在大專案會做分層,讓程式不會特別亂。當然有些小專案不會這麼複雜,有些公司(優良)可能會用,但有些可能不會特別設定,但正常專案通常都會切。設定這個可能也需要一些編譯程式知識,新手不了解編譯程式相關知識可能會遇到很多問題,我推薦了解再回來看可能會比較懂在做什麼。

常見分層

MVC

常見的開發模式會切層ModelViewController。這邊就不詳細介紹。我第一間公司有分這三層,但這三層寫久了會發現一個問題。Controller 那邊很多方法,寫久了會有後會覺得亂亂的。這時候會有一個概念 Service,通常這個會用來處理商業一些邏輯用,可以讓你的程式共用。

詳細內容推薦看菜雞新訓記 (5): 使用 三層式架構 來切分服務的關注點和職責吧 | 伊果的沒人看筆記本這篇,有很多觀點我覺得作者講的很棒,算是講得滿細,滿多自己的觀點。但大部分方向都是一樣的,有些設計會不太一樣,很多人都不會提到 DTO,但我覺得可以了解 DTO 是做什麼用?可能很多專案 DTO 指的意思都是不一樣東西。

Note

我覺得每個人都有各自想法,但這篇文章真的講滿多的,推薦可以看一下。畢竟我待過每家切的層都不太一樣,可能有些人分資料夾解決,有些會分 Package 再透過專案引入。

我覺得先會怎麼使用,在學要怎麼用才是重要的。不要照教學操作,結果設計不知道要怎麼做就不是很好。就像 GIT 會先學怎麼用,不會一開始去學 GIT Flow 流程。

Note
有些框架 Controller 層不能呼叫 Controller Method,但是有些框架沒有這個問題。像我之前 PHP 框架 Controller 寫上商業邏輯,但是要呼叫之前寫的商業邏輯就沒辦法重複使用,因為 Controller 沒法直接呼叫 Controller Method。所以我認為拆 Service 也是很重要的一件事。

DDD

https://i.imgur.com/RwoMBQk.png
  1. 展示層: Web MVC,Web API
  2. 應用層: 診對用戶場景、用例設計應用層服務,離底層細節。
  3. 領域層: 專注於維護業務規則
  4. 基處設施層:負責資料查詢和持久化

最近買中台架構與實現 - 基於 DDD 和微服務書還沒看完,這邊就不說太多。

使用 dotnet cli 指令建立分層

發現最近 .Net 專案建置分層很不方便,剛好最近裝 cli 工具嘗試看看。

參考: Visual Studio解决方案中添加src文件夹的方法_vs怎么在解决方案添加文件夹_倾斜的水瓶座的博客-CSDN博客

  1. 建立方案資料夾
1
mkdir solution
  1. 建立方案檔案
1
2
3
4
5
6
7
8
dotnet new sln
ls
#     目錄: D:\Code\DotNet\solution


# Mode                 LastWriteTime         Length Name
# ----                 -------------         ------ ----
# -a----       2023/6/21  下午 10:39            441 solution.sln
  1. 建立新的專案(Library)
1
dotnet new classlib -o src/src/solution.Library
  1. 方案加入新專案
1
2
dotnet sln add .\src\solution.Library
# 專案 `src\solution.Library\solution.Library.csproj` 已新增至解決方案。

接下來 reference project 可以參考dotnet add reference command - .NET CLI | Microsoft Learn

快速產生 Controller 和 View 可以參考 如何使用 .NET CLI 快速產生 ASP․NET Core 的 Controllers 與 Views 程式碼 | The Will Will Web

我覺得用 vsCode 好像沒有用 Visual Studio Code 方便。

Visual Studio 操作專案分層

開始新增另一個專案

這邊開始本篇重頭戲。其實只有兩個步驟。

https://i.imgur.com/039iYn0.png https://i.imgur.com/iCpekZW.png

參考:使用 Visual Studio 建立 .NET 類別庫 - .NET | Microsoft Docs
使用 Visual Studio Code 建立 .NET 類別庫 - .NET | Microsoft Docs

https://i.imgur.com/s8Cv85C.png

在主專案依賴另一個專案

管理專案中的參考 - Visual Studio (Windows) | Microsoft Docs

每次都會忘掉怎麼使用,這邊稍微紀錄。

  1. 專案下面依賴性右鍵(可參考下面圖片)
  2. 新增專案參考
  3. 勾選剛剛新增要引入專案
  4. 確認就完成匯入
https://user-images.githubusercontent.com/6058558/206764641-fcd67070-af69-4c31-b79a-b0d97d1f7ef0.png

我們這邊發現一件事情,只要依賴別的專案過,其中依賴裡面還有再依賴別的專案,到主專案就不需要再依賴進去。

這邊舉例來說,假如 Web 有用到 Service,再到 Service 有依賴 Common, Web 就不需要再依賴 Common。就算你想點依賴,Visual Studio 也會提示你重複依賴,不給你點下去。這點跟 Java 不太一樣。

Note

Java import 一些專案有分編譯時候執行時候依賴專案來源。所以在有一些古老專案,老專案沒有使用 Maven 和 Gradle 管理工具去控制,但是在 Eclipse 可以手動去依賴,這時候我有看到很多專案都會做 import 動作。

舉個例子,假如 Web 有用到 Service ,再到 Service 有依賴 Common ,Web 還需再依賴 Common ,如果,Web沒依賴 Common 就會錯誤。

切層後的結果

https://user-images.githubusercontent.com/6058558/206766121-ded478e0-0d65-415b-aeb8-3fed899770d8.png