摘要:基於.NET Core 7.0WebApi後端架構實戰【1-專案結構分層設計】 2023/02/05, ASP.NET Core 7.0, VS2022
從實習到現在回想自己已經入行四年了,很慶幸自己一直還是從事著開發的工作。這幾年不管是工作還是生活都有很多不甘與失落還有
收穫,從學校出來之後有時候覺得自己的心態受不了小小的打擊,可能就像平凡的世界中的孫少平一樣,有著一顆敏感而脆弱的自尊心。春
種一粒粟,秋收萬顆子。從2021年1月份到現在一直沒有更新過部落格,在這個播種的季節我想我應該要總結一下過去的技術經驗,對自己是提
升,對別人可能或多或少都有幫助。阿里巴巴大神畢玄曾說過,「一個優秀的工程師和一個普通工程師的區別,不是滿天飛的架構圖,他的功
底體現在所寫的每一行程式碼上」。這句話我與諸君共思共勉!
傳統的三層架構:表現層、業務邏輯層和資料存取層,如下圖所示:
基於DDD的四層架構:使用者介面層、應用層、領域層和基礎設施層,如下圖所示:
與傳統的三層架構相比DDD的分層架構將業務邏輯層拆為了應用層與領域層
下方左圖為傳統四層架構,右圖為依賴倒置後的四層架構。應用層與領域層提供介面,基礎設施層提供實現。領域層不依賴任何一層,只專注與業務。個人認為基礎設施層迭代頻率要低於介面層,抽象程度高於表現層。所以讓表現層依賴基礎設施層更合適。
我的本系列部落格對應的專案也是基於DDD的架構思想,當然也會加入自己的一些想法在其中。
想學習領域驅動設計的同學可移步《DDD 實戰課》
整體專案結構如下方三張圖所示:
1.ICore.WebApi
這一層主要構建 RESTful 應用程式,提供HTTP服務。管道中介軟體、過濾器、跨域、路由、模型驗證等都在此設定。
2.ICore.Application
這一層很薄,不會包含任何與業務有關的邏輯資訊,將使用CQRS的設計模式。安全認證、許可權校驗、事務控制、傳送或訂閱領域事件等都可在此層做處理。
3.ICore.Task
這一層主要用於處理系統內小型定時任務。繁多、複雜的定時任務建議用第三方排程平臺,例如:XXL-JOB。
4.ICore.Domain.Core
這一層主要用於實現核心的業務邏輯!內部主要包含Entity(實體)、Domain Event(領域事件)、Domain Service(領域服務)等。
5.ICore.Domain.Abstractions
這一層主要用於定義一些基礎類別的介面和領域事件的介面。例如:IAggregateRoot聚合根介面、IEntity、IEntity<TKey> 實體介面等。
6.ICore.Infrastructure.Core
這一層主要對整個應用程式提供基礎實現,例如倉儲的實現、工作單元模式的實現、Redis快取、佇列服務等。
7.ICore.Test
這一層主要用於對整個程式的單元測試,減少不必要的BUG以及提高測試效率。
我強烈建議大家看阿里巴巴Java開發手冊,以上面的規範來約束自己的編碼。
首先.Net Core同Spring Boot一樣都是自宿主程式,其不是必需在IIS內部託管。實現跨平臺離不開.Net Core內建的kestrel高效能伺服器,如下圖所示(圖片來自官網):
1、在launchSettings.json
檔案中修改站點資訊,把IIS Express節點刪掉
2、在appsettings.json
中設定啟動埠
"Kestrel": {
"Endpoints": {
"Https": {
"Url": "https://*:8000"
},
"Http": {
"Url": "http://*:8001"
}
}
}
3、在Program
中設定啟動埠
app.Run("http://*:8001");
從.Net6.0開始已去除了Startup.cs 檔案,依賴注入服務和Middleware全在Program.cs中設定。
我從寫.Net Core2.0開始一直到現在,Startup.cs檔案我覺得還是有必要存在,個人使用習慣而已