找回密码
 立即注册
首页 业界区 业界 DDD架构模板:Ncp.CleanDDD

DDD架构模板:Ncp.CleanDDD

闰咄阅 昨天 15:21
一个优雅的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
前端技术栈


  • 框架:Vue 3 + TypeScript
  • UI组件库:Element Plus
  • 路由:Vue Router
  • 状态管理:Pinia
  • HTTP客户端:Axios
  • 构建工具:Vite
项目结构

Ncp.CleanDDD采用严格的分层架构,遵循依赖倒置原则,各层之间保持清晰的边界:
  1. Ncp.CleanDDD.sln
  2. ├── src/
  3. │   ├── Ncp.CleanDDD.Domain/         # 领域层 - 聚合根、实体、领域事件
  4. │   ├── Ncp.CleanDDD.Infrastructure/ # 基础设施层 - EF配置、仓储实现
  5. │   └── Ncp.CleanDDD.Web/           # 表现层 - API、应用服务
  6. └── test/                            # 测试项目
  7.     ├── Ncp.CleanDDD.Domain.Tests/
  8.     ├── Ncp.CleanDDD.Infrastructure.Tests/
  9.     └── 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快捷键可以快速生成一个完整的垂直切片实现,包含请求、响应、验证器和处理器。
代码分析可视化

一个非常有特色的功能是代码分析可视化工具,它能自动分析代码结构并生成交互式图表:
  1. # 安装全局工具
  2. dotnet tool install -g NetCorePal.Extensions.CodeAnalysis.Tools
  3. # 生成可视化文件
  4. cd src/Ncp.CleanDDD.Web
  5. netcorepal-codeanalysis generate --output architecture.html
复制代码
生成的HTML页面包含多种图表类型,如架构流程图、命令链路图、事件流程图等,支持在线编辑和导出,帮助团队更好地理解系统结构。
快速开始

环境准备

项目依赖MySQL、RabbitMQ和Redis,可通过Docker快速部署:
  1. # 启动MySQL
  2. 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
  3. # 启动RabbitMQ
  4. docker run --restart always -d --hostname node1 --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management
  5. # 启动Redis
  6. 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:
  1. # 安装EF工具
  2. dotnet tool install --global dotnet-ef --version 9.0.0
  3. # 创建迁移
  4. dotnet ef migrations add InitialCreate -p src/Ncp.CleanDDD.Infrastructure
  5. # 更新数据库
  6. dotnet ef database update -p src/Ncp.CleanDDD.Infrastructure
复制代码
前端启动

前端项目基于Vue 3构建,启动步骤:
  1. # 进入前端目录
  2. cd frontend
  3. # 安装依赖
  4. npm install
  5. # 启动开发服务器
  6. 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,相信它会给你带来惊喜!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册