refactor(#777): 修复Domain层依赖Adapters的DDD违规(4处) #789

Merged
xiaoxia merged 1 commits from refactor/fix-domain-adapters-dependency into develop 2026-07-23 23:54:56 +08:00
Owner

变更内容

代码质量专项P1:#777 修复Domain层依赖Adapters的DDD违规

4处违规点

  1. domain/auth/email_service.py → 反向import adapters.smtp
  2. domain/auth/session_store.py → 反向import adapters.redis
  3. domain/auth/__init__.py → 反向import application.auth.jwt_service
  4. domain/auth/__init__.py → 反向import application.auth.password_hasher

修复方案(DDD依赖倒置)

领域层定义端口(Port):

  • EmailServicePort(ABC) — 邮件服务接口
  • SessionStorePort(ABC) — Session存储接口
  • JWTServicePort(ABC) — JWT服务接口
  • PasswordHasherPort(ABC) — 密码哈希接口
  • PasswordValidatorPort(ABC) — 密码强度验证接口

外层实现端口:

  • adapters.smtp.EmailService(EmailServicePort)
  • adapters.redis.SessionStore(SessionStorePort)
  • application.auth.JWTService(JWTServicePort)
  • application.auth.PasswordHasher(PasswordHasherPort)
  • application.auth.PasswordValidator(PasswordValidatorPort)

其他调整:

  • EmailConfig 从adapters上移到domain层(纯值对象,无基础设施依赖)
  • 清理 domain/auth/__init__.py,只导出领域端口接口
  • 测试文件import路径修正(从adapters层导入具体实现)

验证

  • 领域层零对外依赖(adapters/application)
  • 全量单测:4383 passed, 8 skipped
## 变更内容 代码质量专项P1:#777 修复Domain层依赖Adapters的DDD违规 ### 4处违规点 1. `domain/auth/email_service.py` → 反向import adapters.smtp 2. `domain/auth/session_store.py` → 反向import adapters.redis 3. `domain/auth/__init__.py` → 反向import application.auth.jwt_service 4. `domain/auth/__init__.py` → 反向import application.auth.password_hasher ### 修复方案(DDD依赖倒置) **领域层定义端口(Port):** - `EmailServicePort(ABC)` — 邮件服务接口 - `SessionStorePort(ABC)` — Session存储接口 - `JWTServicePort(ABC)` — JWT服务接口 - `PasswordHasherPort(ABC)` — 密码哈希接口 - `PasswordValidatorPort(ABC)` — 密码强度验证接口 **外层实现端口:** - `adapters.smtp.EmailService(EmailServicePort)` - `adapters.redis.SessionStore(SessionStorePort)` - `application.auth.JWTService(JWTServicePort)` - `application.auth.PasswordHasher(PasswordHasherPort)` - `application.auth.PasswordValidator(PasswordValidatorPort)` **其他调整:** - `EmailConfig` 从adapters上移到domain层(纯值对象,无基础设施依赖) - 清理 `domain/auth/__init__.py`,只导出领域端口接口 - 测试文件import路径修正(从adapters层导入具体实现) ### 验证 - 领域层零对外依赖(adapters/application) - 全量单测:4383 passed, 8 skipped
xiaoxia added 1 commit 2026-07-23 22:46:10 +08:00
refactor(#777): 修复Domain层依赖Adapters的DDD违规(4处)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 14s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 58s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m30s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 24s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 46s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 58s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 50s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 30s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m52s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m17s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m32s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m24s
AI Code Review / AI Code Review (pull_request) Successful in 5m41s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 8m51s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 9s
00baaf9e93
- 领域层定义端口接口(EmailServicePort/SessionStorePort/JWTServicePort/PasswordHasherPort)
  遵循DDD依赖倒置原则:领域层定义端口,外层实现端口
- EmailConfig从adapters上移到domain层(值对象,无基础设施依赖)
- Adapter实现类继承领域端口接口:
  Smtp EmailService(EmailServicePort)
  Redis SessionStore(SessionStorePort)
  JWTService(JWTServicePort)
  PasswordHasher(PasswordHasherPort)
- 清理domain/auth/__init__.py,移除对application/adapters的反向import
- 测试文件import路径修正,从adapters层导入具体实现
- 领域层零对外依赖(adapters/application),全量单测4383 passed
Collaborator

代码审查结果 - PR #789

⚠️ 问题(0个需要修改)

💡 建议(1个可选)

  1. 类型注解风格不一致:在新增的领域层文件(email_service.py, session_store.py)中使用了内置泛型类型(如 list[dict], tuple[...]),而在 password_hasher.pyjwt_service.py 中使用了 typing 模块的类型(List, Dict, Tuple)。建议统一风格,考虑到项目可能需要兼容旧版本 Python 或保持一致性,建议统一使用 typing 模块中的类型(List, Dict, Tuple)。

格式检查通过 | 逻辑审查通过 | 性能良好


🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 14:54:22 | 模型:

## 代码审查结果 - PR #789 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(1个可选) 1. **类型注解风格不一致**:在新增的领域层文件(`email_service.py`, `session_store.py`)中使用了内置泛型类型(如 `list[dict]`, `tuple[...]`),而在 `password_hasher.py` 和 `jwt_service.py` 中使用了 `typing` 模块的类型(`List`, `Dict`, `Tuple`)。建议统一风格,考虑到项目可能需要兼容旧版本 Python 或保持一致性,建议统一使用 `typing` 模块中的类型(`List`, `Dict`, `Tuple`)。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-23 14:54:22 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit d92909321c into develop 2026-07-23 23:54:56 +08:00
xiaoxia deleted branch refactor/fix-domain-adapters-dependency 2026-07-23 23:54:56 +08:00

🗑️ 预览环境已清理

PR #789 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #789 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.