这是一个基于.NET 9.0和领域驱动设计(DDD)架构模式开发的待办事项管理系统。系统采用了清晰的分层架构,实现了完整的CRUD操作,并包含了领域事件、值对象、领域服务等DDD核心概念的应用。
- 开发框架:.NET 9.0 Web API
- 开发语言:C#
- API文档:Swagger/OpenAPI
- 依赖注入:ASP.NET Core内置DI容器
- 数据存储:内存存储(可扩展为数据库)
系统严格遵循DDD分层架构,包含以下核心层次:
领域层是系统的核心,包含了所有业务规则和领域概念。
- ToDoItem:待办事项实体,包含ID、标题、描述、完成状态等核心属性和行为
- Title:标题值对象,包含验证规则(非空、最大长度100字符)
- Description:描述值对象,包含验证规则(最大长度500字符)
- ToDoItemCreatedEvent:待办事项创建事件
- ToDoItemCompletedEvent:待办事项完成事件
- ToDoItemService:包含业务规则验证,如最大活跃待办事项数量限制
- IToDoItemRepository:定义待办事项数据访问抽象
应用层协调领域对象完成用例,但不包含业务规则。
- ToDoItemDTO:用于API响应的待办事项数据结构
- CreateToDoItemRequest:创建待办事项请求模型
- UpdateToDoItemRequest:更新待办事项请求模型
- ToDoItemAppService:处理应用逻辑,协调领域对象和仓储
基础设施层提供技术实现,支持领域层和应用层。
- InMemoryToDoItemRepository:基于内存的待办事项仓储实现
接口层处理外部请求,将请求转发给应用层。
- ToDoController:RESTful API控制器,提供HTTP端点
- 创建待办事项:创建新的待办事项,自动生成唯一ID
- 查询待办事项:获取单个或所有待办事项
- 更新待办事项:修改待办事项的标题和描述
- 完成/取消完成待办事项:标记待办事项为完成或未完成状态
- 删除待办事项:删除指定的待办事项
- 最大活跃待办事项限制:最多允许10个未完成的待办事项
- 数据验证:标题不能为空且不超过100字符,描述不超过500字符
- 待办事项创建时发布创建事件
- 待办事项完成时发布完成事件
系统提供以下RESTful API端点:
| 端点 | 方法 | 描述 |
|---|---|---|
/api/todo |
GET |
获取所有待办事项 |
/api/todo/{id} |
GET |
根据ID获取待办事项 |
/api/todo |
POST |
创建新的待办事项 |
/api/todo/{id} |
PUT |
更新待办事项 |
/api/todo/{id}/complete |
PUT |
标记待办事项为完成 |
/api/todo/{id}/uncomplete |
PUT |
标记待办事项为未完成 |
/api/todo/{id} |
DELETE |
删除待办事项 |
- 清晰的分层设计,各层职责明确
- 领域模型驱动设计,业务逻辑封装在领域层
- 值对象的使用确保数据完整性和不变性
- 仓储模式使系统易于切换到不同的持久化方案
- 依赖注入设计使组件松耦合,便于测试和替换
- 输入验证确保数据完整性
- 异常处理机制保证系统稳定性
- 集成Swagger UI,提供交互式API文档
- 代码结构清晰,便于维护和扩展
- .NET 9.0 SDK
- Visual Studio 2022或更高版本(推荐)
- 克隆或下载项目源码
- 使用Visual Studio打开解决方案文件
ToDoListDDD.sln - 构建并运行项目
- 访问
https://localhost:5001打开Swagger UI界面
通过Swagger UI界面,您可以:
- 查看API文档
- 测试各个API端点
- 查看请求和响应示例
ToDoListDDD/
├── Application/ # 应用层
│ ├── DTOs/ # 数据传输对象
│ └── Services/ # 应用服务
├── Domain/ # 领域层
│ ├── Entities/ # 实体
│ ├── Events/ # 领域事件
│ ├── Repositories/ # 仓储接口
│ ├── Services/ # 领域服务
│ └── ValueObjects/ # 值对象
├── Infrastructure/ # 基础设施层
│ └── Persistence/ # 数据持久化实现
├── Interface/ # 接口层
│ └── Controllers/ # API控制器
├── Program.cs # 应用入口
└── ToDoListDDD.csproj # 项目配置文件
- 添加数据库支持:实现基于EF Core的仓储,替换内存存储
- 添加身份认证:集成ASP.NET Core Identity或JWT认证
- 添加更多业务规则:如待办事项分类、优先级等
- 实现事件总线:用于处理领域事件的异步发布和订阅
- 添加缓存:提高系统性能
- 添加单元测试和集成测试:确保系统质量
本项目展示了如何在.NET环境中实现领域驱动设计架构,通过清晰的分层和职责划分,创建了一个可维护、可扩展的待办事项管理系统。系统充分体现了DDD的核心概念和最佳实践,为构建复杂业务系统提供了良好的参考模型。