- 新增 domain 层:model、provider、route、stats 实体 - 新增 service 层:models、providers、routing、stats 业务逻辑 - 新增 repository 层:models、providers、stats 数据访问 - 新增 pkg 工具包:errors、logger、validator - 新增中间件:CORS、logging、recovery、request ID - 新增数据库迁移:初始 schema 和索引 - 新增单元测试和集成测试 - 新增规范文档:config-management、database-migration、error-handling、layered-architecture、middleware-system、request-validation、structured-logging、test-coverage - 移除 config 子包和 model_router(已迁移至分层架构)
3.4 KiB
3.4 KiB
Layered Architecture
ADDED Requirements
Requirement: 实现三层架构
系统 SHALL 实现 handler → service → repository 三层架构。
Scenario: Handler 层职责
- WHEN 处理 HTTP 请求
- THEN handler 层 SHALL 仅负责 HTTP 请求解析和响应
- THEN handler 层 SHALL 调用 service 层处理业务逻辑
- THEN handler 层 SHALL NOT 直接访问数据库
Scenario: Service 层职责
- WHEN 处理业务逻辑
- THEN service 层 SHALL 包含业务规则和验证
- THEN service 层 SHALL 调用 repository 层访问数据
- THEN service 层 SHALL 协调多个 repository 的操作
Scenario: Repository 层职责
- WHEN 访问数据
- THEN repository 层 SHALL 仅负责数据访问
- THEN repository 层 SHALL 封装数据库操作
- THEN repository 层 SHALL NOT 包含业务逻辑
Requirement: 定义核心接口
系统 SHALL 定义清晰的接口边界。
Scenario: Service 接口定义
- WHEN 定义 service 接口
- THEN SHALL 定义 ProviderService、ModelService、RoutingService、StatsService 接口
- THEN SHALL 定义清晰的业务方法签名
- THEN SHALL 使用 domain 类型作为参数和返回值
Scenario: Repository 接口定义
- WHEN 定义 repository 接口
- THEN SHALL 定义 ProviderRepository、ModelRepository、StatsRepository 接口
- THEN SHALL 定义清晰的数据访问方法签名
- THEN SHALL 使用 domain 类型作为参数和返回值
Scenario: Provider Client 接口定义
- WHEN 定义 provider client 接口
- THEN SHALL 定义 ProviderClient 接口
- THEN SHALL 包含 SendRequest 和 SendStreamRequest 方法
- THEN SHALL 支持接口 Mock
Requirement: 实现依赖注入
系统 SHALL 使用手动依赖注入。
Scenario: Repository 注入
- WHEN 初始化 service
- THEN SHALL 通过构造函数注入 repository 依赖
- THEN SHALL 使用接口类型而非具体类型
Scenario: Service 注入
- WHEN 初始化 handler
- THEN SHALL 通过构造函数注入 service 依赖
- THEN SHALL 使用接口类型而非具体类型
Scenario: 主函数组装
- WHEN 应用启动
- THEN main.go SHALL 按顺序构造所有依赖
- THEN SHALL 先构造基础设施(logger、database)
- THEN SHALL 再构造 repository、service、handler
Requirement: 定义 Domain 模型
系统 SHALL 定义独立的 domain 模型。
Scenario: Domain 模型定义
- WHEN 定义领域模型
- THEN SHALL 在 internal/domain/ 包中定义
- THEN SHALL 包含 Provider、Model、UsageStats 等模型
- THEN SHALL 与数据库模型分离
Scenario: Domain 模型使用
- WHEN service 和 repository 处理数据
- THEN SHALL 使用 domain 模型
- THEN SHALL NOT 使用数据库模型(GORM 模型)
Requirement: 提高可测试性
架构 SHALL 提高代码可测试性。
Scenario: Service 层测试
- WHEN 测试 service 层
- THEN SHALL 能够 Mock repository 依赖
- THEN SHALL 能够独立测试业务逻辑
Scenario: Handler 层测试
- WHEN 测试 handler 层
- THEN SHALL 能够 Mock service 依赖
- THEN SHALL 能够独立测试 HTTP 处理逻辑
Scenario: Repository 层测试
- WHEN 测试 repository 层
- THEN SHALL 使用测试数据库
- THEN SHALL 能够独立测试数据访问逻辑