Skip to content

架构迁移指南

本文档记录了从遗留分层实现升级到 DDD 四层架构 + CQRS 模式 的过程。

状态: 迁移已完成 (2025-11-19)

Table of Contents

重构概览

解决的问题

问题解决方案
缺少 Application 层新增 internal/application/
读写操作混合CQRS Repository 分离
Domain 贫血模型富领域模型 + 业务方法
Infrastructure 职责过重明确 Domain Service 接口

迁移成果

  • ✅ Application 层: 30 Use Cases (18 Command + 12 Query)
  • ✅ CQRS Repository: 8 Command + 8 Query
  • ✅ 富领域模型: User、Role 等含业务行为
  • ✅ 单一依赖注入容器

迁移阶段

阶段内容参考文件
1创建 Application 层结构internal/application/*/
2重构 Domain 层 (移除 GORM Tag)internal/domain/*/entity_*.go
3实现 CQRS Repositoryinternal/infrastructure/persistence/*_repository.go
4创建 Use Casesinternal/application/*/cmd_*.go, qry_*.go
5重构 Infrastructure Serviceinternal/infrastructure/auth/service.go
6更新 Adapter 层internal/adapters/http/handler/*.go
7更新依赖注入容器internal/bootstrap/container.go

完成模块

模块CommandQuery状态
Auth31
User55
Role43
Menu42
Setting42
PAT22
AuditLog02

最佳实践

Use Case 命名

  • Command: cmd_{动作}.goCreate{Entity}Command
  • Query: qry_{动作}.goGet{Entity}Query
  • Handler: *_handler.go

CQRS 适用场景

  • ✅ 读写频率差异大
  • ✅ 需要独立优化读性能
  • ✅ 审计/日志等只读场景
  • ⚠️ 简单 CRUD 可选

验证清单

  • [ ] 所有 Handler 只做 HTTP 转换
  • [ ] 业务逻辑在 Application 层
  • [ ] Domain 无 GORM 依赖
  • [ ] Repository 读写分离
  • [ ] go build ./... 无错误

基于 DDD + CQRS 架构的企业级应用模板