341 lines
12 KiB
Markdown
341 lines
12 KiB
Markdown
|
|
# 应用服务层改造计划
|
||
|
|
|
||
|
|
## 📋 项目概述
|
||
|
|
|
||
|
|
### 当前项目状态
|
||
|
|
|
||
|
|
- **项目名称**: TYAPI Server (Gin 框架)
|
||
|
|
- **当前架构**: DDD 领域驱动设计(不完整)
|
||
|
|
- **现有域**: 用户域、认证域、财务域、管理员域
|
||
|
|
- **主要问题**: HTTP 处理器直接调用域服务,缺乏应用服务层
|
||
|
|
|
||
|
|
### 改造目标
|
||
|
|
|
||
|
|
- 完善 DDD 分层架构
|
||
|
|
- 添加应用服务层
|
||
|
|
- 重构基础设施层
|
||
|
|
- 提高代码可维护性和可测试性
|
||
|
|
|
||
|
|
## 🏗️ 目标架构设计
|
||
|
|
|
||
|
|
### 改造后的目录结构
|
||
|
|
|
||
|
|
```
|
||
|
|
internal/
|
||
|
|
├── application/ # 应用服务层 (Application Services Layer)
|
||
|
|
│ ├── user/
|
||
|
|
│ │ ├── user_application_service.go
|
||
|
|
│ │ ├── dto/
|
||
|
|
│ │ │ ├── commands/
|
||
|
|
│ │ │ │ ├── register_user_command.go
|
||
|
|
│ │ │ │ ├── login_user_command.go
|
||
|
|
│ │ │ │ └── change_password_command.go
|
||
|
|
│ │ │ ├── queries/
|
||
|
|
│ │ │ │ └── get_user_profile_query.go
|
||
|
|
│ │ │ └── responses/
|
||
|
|
│ │ │ ├── register_user_response.go
|
||
|
|
│ │ │ ├── login_user_response.go
|
||
|
|
│ │ │ └── user_profile_response.go
|
||
|
|
│ │ └── events/
|
||
|
|
│ │ └── user_application_events.go
|
||
|
|
│ ├── certification/
|
||
|
|
│ │ ├── certification_application_service.go
|
||
|
|
│ │ ├── dto/
|
||
|
|
│ │ │ ├── commands/
|
||
|
|
│ │ │ │ ├── create_certification_command.go
|
||
|
|
│ │ │ │ ├── submit_enterprise_info_command.go
|
||
|
|
│ │ │ │ ├── upload_license_command.go
|
||
|
|
│ │ │ │ ├── initiate_face_verify_command.go
|
||
|
|
│ │ │ │ └── apply_contract_command.go
|
||
|
|
│ │ │ ├── queries/
|
||
|
|
│ │ │ │ ├── get_certification_status_query.go
|
||
|
|
│ │ │ │ └── get_certification_details_query.go
|
||
|
|
│ │ │ └── responses/
|
||
|
|
│ │ │ ├── certification_response.go
|
||
|
|
│ │ │ ├── enterprise_info_response.go
|
||
|
|
│ │ │ └── upload_license_response.go
|
||
|
|
│ │ └── events/
|
||
|
|
│ │ └── certification_application_events.go
|
||
|
|
│ ├── finance/
|
||
|
|
│ │ ├── finance_application_service.go
|
||
|
|
│ │ ├── dto/
|
||
|
|
│ │ │ ├── commands/
|
||
|
|
│ │ │ │ ├── create_wallet_command.go
|
||
|
|
│ │ │ │ ├── recharge_wallet_command.go
|
||
|
|
│ │ │ │ ├── withdraw_wallet_command.go
|
||
|
|
│ │ │ │ ├── create_user_secrets_command.go
|
||
|
|
│ │ │ │ └── regenerate_access_key_command.go
|
||
|
|
│ │ │ ├── queries/
|
||
|
|
│ │ │ │ ├── get_wallet_info_query.go
|
||
|
|
│ │ │ │ └── get_user_secrets_query.go
|
||
|
|
│ │ │ └── responses/
|
||
|
|
│ │ │ ├── wallet_response.go
|
||
|
|
│ │ │ ├── transaction_response.go
|
||
|
|
│ │ │ └── user_secrets_response.go
|
||
|
|
│ │ └── events/
|
||
|
|
│ │ └── finance_application_events.go
|
||
|
|
│ └── admin/
|
||
|
|
│ ├── admin_application_service.go
|
||
|
|
│ ├── dto/
|
||
|
|
│ │ ├── commands/
|
||
|
|
│ │ │ ├── admin_login_command.go
|
||
|
|
│ │ │ ├── create_admin_command.go
|
||
|
|
│ │ │ ├── update_admin_command.go
|
||
|
|
│ │ │ └── change_admin_password_command.go
|
||
|
|
│ │ ├── queries/
|
||
|
|
│ │ │ ├── get_admin_info_query.go
|
||
|
|
│ │ │ └── list_admins_query.go
|
||
|
|
│ │ └── responses/
|
||
|
|
│ │ ├── admin_login_response.go
|
||
|
|
│ │ ├── admin_info_response.go
|
||
|
|
│ │ └── admin_list_response.go
|
||
|
|
│ └── events/
|
||
|
|
│ └── admin_application_events.go
|
||
|
|
├── domains/ # 领域层 (Domain Layer) - 保持不变
|
||
|
|
│ ├── user/
|
||
|
|
│ │ ├── entities/
|
||
|
|
│ │ ├── services/
|
||
|
|
│ │ ├── repositories/
|
||
|
|
│ │ ├── dto/
|
||
|
|
│ │ └── events/
|
||
|
|
│ ├── certification/
|
||
|
|
│ │ ├── entities/
|
||
|
|
│ │ ├── services/
|
||
|
|
│ │ ├── repositories/
|
||
|
|
│ │ ├── dto/
|
||
|
|
│ │ ├── events/
|
||
|
|
│ │ └── enums/
|
||
|
|
│ ├── finance/
|
||
|
|
│ │ ├── entities/
|
||
|
|
│ │ ├── services/
|
||
|
|
│ │ ├── repositories/
|
||
|
|
│ │ ├── dto/
|
||
|
|
│ │ └── value_objects/
|
||
|
|
│ └── admin/
|
||
|
|
│ ├── entities/
|
||
|
|
│ ├── services/
|
||
|
|
│ ├── repositories/
|
||
|
|
│ └── dto/
|
||
|
|
├── infrastructure/ # 基础设施层 (Infrastructure Layer) - 新增
|
||
|
|
│ ├── http/
|
||
|
|
│ │ ├── handlers/
|
||
|
|
│ │ │ ├── user_handler.go # 从 domains/user/handlers/ 移动
|
||
|
|
│ │ │ ├── certification_handler.go # 从 domains/certification/handlers/ 移动
|
||
|
|
│ │ │ ├── finance_handler.go # 从 domains/finance/handlers/ 移动
|
||
|
|
│ │ │ └── admin_handler.go # 从 domains/admin/handlers/ 移动
|
||
|
|
│ │ ├── middleware/ # 从 shared/middleware/ 移动
|
||
|
|
│ │ │ ├── auth.go
|
||
|
|
│ │ │ ├── cors.go
|
||
|
|
│ │ │ ├── ratelimit.go
|
||
|
|
│ │ │ ├── request_logger.go
|
||
|
|
│ │ │ └── tracing.go
|
||
|
|
│ │ └── routes/
|
||
|
|
│ │ ├── user_routes.go # 从 domains/user/routes/ 移动
|
||
|
|
│ │ ├── certification_routes.go # 从 domains/certification/routes/ 移动
|
||
|
|
│ │ ├── finance_routes.go # 从 domains/finance/routes/ 移动
|
||
|
|
│ │ └── admin_routes.go # 从 domains/admin/routes/ 移动
|
||
|
|
│ ├── database/
|
||
|
|
│ │ ├── repositories/
|
||
|
|
│ │ │ ├── user/
|
||
|
|
│ │ │ │ ├── user_repository.go
|
||
|
|
│ │ │ │ └── sms_code_repository.go
|
||
|
|
│ │ │ ├── certification/
|
||
|
|
│ │ │ │ ├── certification_repository.go
|
||
|
|
│ │ │ │ ├── enterprise_repository.go
|
||
|
|
│ │ │ │ └── license_upload_repository.go
|
||
|
|
│ │ │ ├── finance/
|
||
|
|
│ │ │ │ ├── wallet_repository.go
|
||
|
|
│ │ │ │ └── user_secrets_repository.go
|
||
|
|
│ │ │ └── admin/
|
||
|
|
│ │ │ ├── admin_repository.go
|
||
|
|
│ │ │ └── admin_login_log_repository.go
|
||
|
|
│ │ └── migrations/
|
||
|
|
│ │ ├── user_migrations/
|
||
|
|
│ │ ├── certification_migrations/
|
||
|
|
│ │ ├── finance_migrations/
|
||
|
|
│ │ └── admin_migrations/
|
||
|
|
│ ├── cache/
|
||
|
|
│ │ ├── redis_cache.go
|
||
|
|
│ │ └── memory_cache.go
|
||
|
|
│ ├── external/
|
||
|
|
│ │ ├── sms/
|
||
|
|
│ │ │ └── sms_service.go
|
||
|
|
│ │ ├── ocr/
|
||
|
|
│ │ │ └── baidu_ocr_service.go
|
||
|
|
│ │ ├── storage/
|
||
|
|
│ │ │ └── qiniu_storage_service.go
|
||
|
|
│ │ └── notification/
|
||
|
|
│ │ └── wechat_work_service.go
|
||
|
|
│ └── config/
|
||
|
|
│ ├── database_config.go
|
||
|
|
│ ├── redis_config.go
|
||
|
|
│ └── external_services_config.go
|
||
|
|
├── shared/ # 共享层 (Shared Layer) - 保留核心组件
|
||
|
|
│ ├── interfaces/
|
||
|
|
│ │ ├── service.go
|
||
|
|
│ │ ├── repository.go
|
||
|
|
│ │ ├── event.go
|
||
|
|
│ │ └── http.go
|
||
|
|
│ ├── domain/
|
||
|
|
│ │ └── entity.go
|
||
|
|
│ ├── events/
|
||
|
|
│ │ └── event_bus.go
|
||
|
|
│ ├── logger/
|
||
|
|
│ │ └── logger.go
|
||
|
|
│ ├── metrics/
|
||
|
|
│ │ ├── business_metrics.go
|
||
|
|
│ │ └── prometheus_metrics.go
|
||
|
|
│ ├── resilience/
|
||
|
|
│ │ ├── circuit_breaker.go
|
||
|
|
│ │ └── retry.go
|
||
|
|
│ ├── saga/
|
||
|
|
│ │ └── saga.go
|
||
|
|
│ ├── hooks/
|
||
|
|
│ │ └── hook_system.go
|
||
|
|
│ └── tracing/
|
||
|
|
│ ├── tracer.go
|
||
|
|
│ └── decorators.go
|
||
|
|
├── config/ # 配置层 - 保持不变
|
||
|
|
│ ├── config.go
|
||
|
|
│ └── loader.go
|
||
|
|
├── container/ # 容器层 - 保持不变
|
||
|
|
│ └── container.go
|
||
|
|
└── app/ # 应用层 - 保持不变
|
||
|
|
└── app.go
|
||
|
|
```
|
||
|
|
|
||
|
|
## 📝 各层职责说明
|
||
|
|
|
||
|
|
### 应用服务层 (Application Layer)
|
||
|
|
|
||
|
|
- **职责**: 编排业务用例,管理事务边界,协调跨域操作
|
||
|
|
- **包含**: 应用服务、命令对象、查询对象、响应对象、应用事件
|
||
|
|
- **特点**: 无状态,专注于用例编排
|
||
|
|
|
||
|
|
### 领域层 (Domain Layer)
|
||
|
|
|
||
|
|
- **职责**: 核心业务逻辑,业务规则,领域实体
|
||
|
|
- **包含**: 实体、值对象、域服务、仓储接口、域事件
|
||
|
|
- **特点**: 业务逻辑的核心,与技术实现无关
|
||
|
|
|
||
|
|
### 基础设施层 (Infrastructure Layer)
|
||
|
|
|
||
|
|
- **职责**: 技术实现细节,外部系统集成
|
||
|
|
- **包含**: HTTP 处理器、数据库仓储、缓存、外部服务
|
||
|
|
- **特点**: 实现领域层定义的接口
|
||
|
|
|
||
|
|
### 共享层 (Shared Layer)
|
||
|
|
|
||
|
|
- **职责**: 通用工具、接口定义、跨层共享组件
|
||
|
|
- **包含**: 接口定义、事件总线、日志、监控、追踪
|
||
|
|
- **特点**: 被其他层依赖,但不依赖其他层
|
||
|
|
|
||
|
|
## 🎯 改造优先级
|
||
|
|
|
||
|
|
### 第一优先级:用户域
|
||
|
|
|
||
|
|
- **原因**: 最基础的认证功能,其他域都依赖
|
||
|
|
- **复杂度**: 中等
|
||
|
|
- **影响范围**: 全局
|
||
|
|
|
||
|
|
### 第二优先级:认证域
|
||
|
|
|
||
|
|
- **原因**: 核心业务流程,涉及多个实体协调
|
||
|
|
- **复杂度**: 高
|
||
|
|
- **影响范围**: 用户域、管理员域
|
||
|
|
|
||
|
|
### 第三优先级:财务域
|
||
|
|
|
||
|
|
- **原因**: 涉及资金安全,需要事务管理
|
||
|
|
- **复杂度**: 高
|
||
|
|
- **影响范围**: 用户域
|
||
|
|
|
||
|
|
### 第四优先级:管理员域
|
||
|
|
|
||
|
|
- **原因**: 后台管理功能,相对独立
|
||
|
|
- **复杂度**: 低
|
||
|
|
- **影响范围**: 其他域
|
||
|
|
|
||
|
|
## 📋 实施计划
|
||
|
|
|
||
|
|
### 阶段一:基础架构搭建 (1-2 天)
|
||
|
|
|
||
|
|
1. 创建新的目录结构
|
||
|
|
2. 移动现有组件到基础设施层
|
||
|
|
3. 更新依赖注入配置
|
||
|
|
4. 确保项目能正常启动
|
||
|
|
|
||
|
|
### 阶段二:用户域改造 (2-3 天)
|
||
|
|
|
||
|
|
1. 实现用户应用服务
|
||
|
|
2. 重构用户 HTTP 处理器
|
||
|
|
3. 测试用户相关功能
|
||
|
|
4. 完善错误处理
|
||
|
|
|
||
|
|
### 阶段三:认证域改造 (3-4 天)
|
||
|
|
|
||
|
|
1. 实现认证应用服务
|
||
|
|
2. 重构认证 HTTP 处理器
|
||
|
|
3. 处理跨域协调逻辑
|
||
|
|
4. 测试认证流程
|
||
|
|
|
||
|
|
### 阶段四:财务域改造 (2-3 天)
|
||
|
|
|
||
|
|
1. 实现财务应用服务
|
||
|
|
2. 重构财务 HTTP 处理器
|
||
|
|
3. 添加事务管理
|
||
|
|
4. 测试财务功能
|
||
|
|
|
||
|
|
### 阶段五:管理员域改造 (1-2 天)
|
||
|
|
|
||
|
|
1. 实现管理员应用服务
|
||
|
|
2. 重构管理员 HTTP 处理器
|
||
|
|
3. 测试管理功能
|
||
|
|
|
||
|
|
### 阶段六:整体优化 (2-3 天)
|
||
|
|
|
||
|
|
1. 添加应用事件处理
|
||
|
|
2. 完善监控和日志
|
||
|
|
3. 性能优化
|
||
|
|
4. 文档更新
|
||
|
|
|
||
|
|
## ⚠️ 注意事项
|
||
|
|
|
||
|
|
### 备份策略
|
||
|
|
|
||
|
|
- 每个阶段开始前备份当前代码
|
||
|
|
- 使用 Git 分支进行改造
|
||
|
|
- 保留原始代码作为参考
|
||
|
|
|
||
|
|
### 测试策略
|
||
|
|
|
||
|
|
- 每个域改造完成后进行单元测试
|
||
|
|
- 保持 API 接口兼容性
|
||
|
|
- 进行集成测试验证
|
||
|
|
|
||
|
|
### 回滚策略
|
||
|
|
|
||
|
|
- 如果改造出现问题,可以快速回滚到上一个稳定版本
|
||
|
|
- 保持数据库结构不变
|
||
|
|
- 确保配置文件的兼容性
|
||
|
|
|
||
|
|
## 📊 预期收益
|
||
|
|
|
||
|
|
### 架构改进
|
||
|
|
|
||
|
|
- ✅ 职责分离更清晰
|
||
|
|
- ✅ 代码组织更规范
|
||
|
|
- ✅ 可维护性更强
|
||
|
|
|
||
|
|
### 开发效率
|
||
|
|
|
||
|
|
- ✅ 可测试性更好
|
||
|
|
- ✅ 扩展性更强
|
||
|
|
- ✅ 复用性更高
|
||
|
|
|
||
|
|
### 业务价值
|
||
|
|
|
||
|
|
- ✅ 业务逻辑更清晰
|
||
|
|
- ✅ 跨域协调更简单
|
||
|
|
- ✅ 事务管理更可靠
|