单体应用
使用 Gin(Web 框架) + GORM(ORM 框架) 构建单体应用时,推荐采用经典的 分层架构 。 这种架构的核心原则是 "依赖单向向下" :
HTTP Handler (Controller) ➔ Service (业务逻辑) ➔ Repository (数据持久化) ➔ GORM / Database
项目目录结构
text
├── app.go # 手写依赖注入,初始化 Web 服务
├── main.go # 程序入口
├── Dockerfile # 生产镜像构建
├── docker-compose.yaml # 本地依赖服务(MySQL / Redis)
├── config/
│ └── dev.yaml # 本地开发配置
├── internal/
│ ├── domain/ # 领域模型
│ ├── repository/ # 数据仓库抽象
│ │ └── dao/ # 数据库操作
│ │ └── cache/ # 数据库缓存
│ ├── service/ # 业务逻辑
│ └── web/ # HTTP 接口层
├── pkg/ # 项目内部通用工具(统一响应、自定义错误等)
├── script/ # 数据库初始化等脚本
├── ioc/ # 基础设施初始化(DB / Redis / 中间件 / Handler)
└── k8s-*.yaml # Kubernetes 部署资源
引入 Service - Repostiory - DAO 三层结构
- service: 代表的是领域服务(domain service), 代表一个业务的完整的处理过程。
- repository:按照 DDD 的说法,是代表领域对象的存储,这里你直观理解为存储数据的抽象。
- dao: 代表的是数据库操作。
- domain:代表领域对象。
调用流程
