DDD架構模板:Ncp.CleanDDD
一個優雅的DDD架構模板:Ncp.CleanDDD
在現代軟件開發中,領域驅動設計(DDD)越來越受到開發者的青睞,但搭建一個規范的DDD項目結構往往需要耗費大量時間。今天給大家推薦一個優秀的DDD架構模板——Ncp.CleanDDD,它基于.NET生態系統構建,提供了完整的領域驅動設計實現方案。
項目概述
Ncp.CleanDDD是一個遵循DDD原則的項目模板,它整合了多個優秀的開源框架,為開發者提供了一套開箱即用的企業級應用開發方案。該模板不僅包含了后端服務架構,還提供了配套的前端管理系統,形成了一個完整的解決方案。
項目地址:https://github.com/zhouda1fu/Ncp.CleanDDD
技術棧亮點
后端技術棧
- 核心框架:ASP.NET Core
- 領域驅動設計支持:基于NetCorePal Cloud Framework
- 數據訪問:Entity Framework Core
- 消息隊列:CAP(事件總線)
- 命令查詢分離:MediatR
- 驗證:FluentValidation
- API文檔:Swashbuckle.AspNetCore.Swagger
- API端點設計: FastEndpoints
前端技術棧
- 框架:Vue 3 + TypeScript
- UI組件庫:Element Plus
- 路由:Vue Router
- 狀態管理:Pinia
- HTTP客戶端:Axios
- 構建工具:Vite
項目結構
Ncp.CleanDDD采用嚴格的分層架構,遵循依賴倒置原則,各層之間保持清晰的邊界:
Ncp.CleanDDD.sln
├── src/
│ ├── Ncp.CleanDDD.Domain/ # 領域層 - 聚合根、實體、領域事件
│ ├── Ncp.CleanDDD.Infrastructure/ # 基礎設施層 - EF配置、倉儲實現
│ └── Ncp.CleanDDD.Web/ # 表現層 - API、應用服務
└── test/ # 測試項目
├── Ncp.CleanDDD.Domain.Tests/
├── Ncp.CleanDDD.Infrastructure.Tests/
└── Ncp.CleanDDD.Web.Tests/
分層依賴關系嚴格遵循:Web → Infrastructure → Domain的單向依賴,確保領域層的純粹性。
開發效率工具
代碼片段
模板提供了豐富的代碼片段,支持多種IDE,包括Visual Studio、VS Code和JetBrains Rider,能極大提高開發效率。常用的代碼片段包括:
- 領域層:聚合根(ncpar)、領域事件(ncpde)、倉儲接口(ncprepo)
- 應用層:命令(ncpcmd)、命令(含返回值)(ncpcmdres)、集成事件(ncpie)
- 表現層:FastEndpoint相關片段(epp、epreq、epres等)
例如,使用epp快捷鍵可以快速生成一個完整的垂直切片實現,包含請求、響應、驗證器和處理器。
代碼分析可視化
一個非常有特色的功能是代碼分析可視化工具,它能自動分析代碼結構并生成交互式圖表:
# 安裝全局工具
dotnet tool install -g NetCorePal.Extensions.CodeAnalysis.Tools
# 生成可視化文件
cd src/Ncp.CleanDDD.Web
netcorepal-codeanalysis generate --output architecture.html
生成的HTML頁面包含多種圖表類型,如架構流程圖、命令鏈路圖、事件流程圖等,支持在線編輯和導出,幫助團隊更好地理解系統結構。
快速開始
環境準備
項目依賴MySQL、RabbitMQ和Redis,可通過Docker快速部署:
# 啟動MySQL
docker run --restart always --name mysql -v /mnt/d/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest
# 啟動RabbitMQ
docker run --restart always -d --hostname node1 --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management
# 啟動Redis
docker run --restart always --name redis -v /mnt/d/docker/redis:/data -p 6379:6379 -d redis:5.0.7 redis-server
數據庫遷移
使用EF Core的遷移工具管理數據庫 schema:
# 安裝EF工具
dotnet tool install --global dotnet-ef --version 9.0.0
# 創建遷移
dotnet ef migrations add InitialCreate -p src/Ncp.CleanDDD.Infrastructure
# 更新數據庫
dotnet ef database update -p src/Ncp.CleanDDD.Infrastructure
前端啟動
前端項目基于Vue 3構建,啟動步驟:
# 進入前端目錄
cd frontend
# 安裝依賴
npm install
# 啟動開發服務器
npm run dev
最佳實踐
Ncp.CleanDDD內置了大量最佳實踐,包括:
- 領域事件與集成事件分離:清晰區分領域內事件和跨服務事件
- 命令查詢職責分離(CQRS):通過MediatR實現命令和查詢的分離處理
- 倉儲模式:抽象數據訪問層,隔離領域層與數據訪問細節
- 嚴格的單元測試規范:遵循AAA模式(Arrange、Act、Assert),確保領域邏輯正確性
- API端點設計:使用FastEndpoints替代傳統MVC Controller,提供更好的性能
監控集成
項目集成了prometheus-net,默認通過/metrics地址輸出監控指標,方便與Prometheus等監控系統集成,實現對系統運行狀態的實時監控。
效果圖



總結
Ncp.CleanDDD為開發者提供了一個規范、高效的DDD項目模板,它不僅包含了完整的架構設計,還提供了豐富的工具和最佳實踐,能幫助團隊快速上手領域驅動設計,減少重復工作,專注于業務邏輯的實現。
無論是新啟動的企業級應用,還是現有項目的架構重構,Ncp.CleanDDD都是一個值得考慮的優秀選擇。
如果你對DDD感興趣,或者正在尋找一個成熟的.NET項目模板,不妨訪問項目地址https://github.com/zhouda1fu/Ncp.CleanDDD,相信它會給你帶來驚喜!

浙公網安備 33010602011771號