Skip to content

moshi2005/ToDoListDDD

Repository files navigation

ToDoListDDD - 基于领域驱动设计的待办事项管理系统

项目概述

这是一个基于.NET 9.0和领域驱动设计(DDD)架构模式开发的待办事项管理系统。系统采用了清晰的分层架构,实现了完整的CRUD操作,并包含了领域事件、值对象、领域服务等DDD核心概念的应用。

技术栈

  • 开发框架:.NET 9.0 Web API
  • 开发语言:C#
  • API文档:Swagger/OpenAPI
  • 依赖注入:ASP.NET Core内置DI容器
  • 数据存储:内存存储(可扩展为数据库)

架构设计

系统严格遵循DDD分层架构,包含以下核心层次:

1. 领域层 (Domain)

领域层是系统的核心,包含了所有业务规则和领域概念。

实体 (Entities)

  • ToDoItem:待办事项实体,包含ID、标题、描述、完成状态等核心属性和行为

值对象 (ValueObjects)

  • Title:标题值对象,包含验证规则(非空、最大长度100字符)
  • Description:描述值对象,包含验证规则(最大长度500字符)

领域事件 (Events)

  • ToDoItemCreatedEvent:待办事项创建事件
  • ToDoItemCompletedEvent:待办事项完成事件

领域服务 (Services)

  • ToDoItemService:包含业务规则验证,如最大活跃待办事项数量限制

仓储接口 (Repositories)

  • IToDoItemRepository:定义待办事项数据访问抽象

2. 应用层 (Application)

应用层协调领域对象完成用例,但不包含业务规则。

数据传输对象 (DTOs)

  • ToDoItemDTO:用于API响应的待办事项数据结构
  • CreateToDoItemRequest:创建待办事项请求模型
  • UpdateToDoItemRequest:更新待办事项请求模型

应用服务 (Services)

  • ToDoItemAppService:处理应用逻辑,协调领域对象和仓储

3. 基础设施层 (Infrastructure)

基础设施层提供技术实现,支持领域层和应用层。

数据持久化 (Persistence)

  • InMemoryToDoItemRepository:基于内存的待办事项仓储实现

4. 接口层 (Interface)

接口层处理外部请求,将请求转发给应用层。

控制器 (Controllers)

  • ToDoController:RESTful API控制器,提供HTTP端点

核心功能

1. 待办事项管理

  • 创建待办事项:创建新的待办事项,自动生成唯一ID
  • 查询待办事项:获取单个或所有待办事项
  • 更新待办事项:修改待办事项的标题和描述
  • 完成/取消完成待办事项:标记待办事项为完成或未完成状态
  • 删除待办事项:删除指定的待办事项

2. 业务规则

  • 最大活跃待办事项限制:最多允许10个未完成的待办事项
  • 数据验证:标题不能为空且不超过100字符,描述不超过500字符

3. 领域事件

  • 待办事项创建时发布创建事件
  • 待办事项完成时发布完成事件

API端点

系统提供以下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 删除待办事项

系统特点

1. 严格的DDD架构

  • 清晰的分层设计,各层职责明确
  • 领域模型驱动设计,业务逻辑封装在领域层
  • 值对象的使用确保数据完整性和不变性

2. 可扩展性

  • 仓储模式使系统易于切换到不同的持久化方案
  • 依赖注入设计使组件松耦合,便于测试和替换

3. 安全性

  • 输入验证确保数据完整性
  • 异常处理机制保证系统稳定性

4. 文档完善

  • 集成Swagger UI,提供交互式API文档
  • 代码结构清晰,便于维护和扩展

启动指南

1. 环境要求

  • .NET 9.0 SDK
  • Visual Studio 2022或更高版本(推荐)

2. 运行项目

  1. 克隆或下载项目源码
  2. 使用Visual Studio打开解决方案文件 ToDoListDDD.sln
  3. 构建并运行项目
  4. 访问 https://localhost:5001 打开Swagger UI界面

3. 测试API

通过Swagger UI界面,您可以:

  • 查看API文档
  • 测试各个API端点
  • 查看请求和响应示例

项目结构

ToDoListDDD/
├── Application/             # 应用层
│   ├── DTOs/                # 数据传输对象
│   └── Services/            # 应用服务
├── Domain/                  # 领域层
│   ├── Entities/            # 实体
│   ├── Events/              # 领域事件
│   ├── Repositories/        # 仓储接口
│   ├── Services/            # 领域服务
│   └── ValueObjects/        # 值对象
├── Infrastructure/          # 基础设施层
│   └── Persistence/         # 数据持久化实现
├── Interface/               # 接口层
│   └── Controllers/         # API控制器
├── Program.cs               # 应用入口
└── ToDoListDDD.csproj       # 项目配置文件

扩展建议

  1. 添加数据库支持:实现基于EF Core的仓储,替换内存存储
  2. 添加身份认证:集成ASP.NET Core Identity或JWT认证
  3. 添加更多业务规则:如待办事项分类、优先级等
  4. 实现事件总线:用于处理领域事件的异步发布和订阅
  5. 添加缓存:提高系统性能
  6. 添加单元测试和集成测试:确保系统质量

总结

本项目展示了如何在.NET环境中实现领域驱动设计架构,通过清晰的分层和职责划分,创建了一个可维护、可扩展的待办事项管理系统。系统充分体现了DDD的核心概念和最佳实践,为构建复杂业务系统提供了良好的参考模型。

About

This is a todo list management system developed based on .NET 9.0 and Domain-Driven Design (DDD) architectural pattern. The system adopts a clear layered architecture, implements complete CRUD operations, and incorporates core DDD concepts such as domain events, value objects, and domain services.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors