Golang
Go web 项目结构 - DDD思想
txt
📦 go-ddd-rest
├─📂 cmd
│ └─📂 server # 程序入口
│ └─📄 main.go
├─📂 internal
│ ├─📂 domain # 领域层
│ │ └─📂 user
│ │ ├─📄 entity.go
│ │ ├─📄 value_object.go
│ │ ├─📄 repository.go
│ │ └─📄 service.go
│ ├─📂 application # 应用层
│ │ └─📂 user
│ │ ├─📄 dto.go
│ │ └─📄 service.go
│ ├─📂 infrastructure # 基础设施层
│ │ ├─📂 persistence
│ │ │ └─📂 user
│ │ │ └─📄 repository.go
│ │ └─📄 db.go
│ └─📂 interfaces # 接口层
│ └─📂 http
│ ├─📂 handler
│ │ └─📄 user_handler.go
│ └─📄 router.go
├─📂 pkg # 可复用工具库
│ └─📄 logger.go
├─📄 go.mod
└─📄 README.md
核心分层解释(DDD)
领域层 (Domain Layer)
- 目录位置:
internal/domain
- 主要作用:核心业务逻辑
- 主要内容 / 功能:
- 实体(Entity)
- 值对象(Value Object)
- 聚合根
- 领域服务(Domain Service)
- 仓储接口(Repository Interface)
- 特点:
- 纯业务逻辑,无外部依赖
- 稳定不变,是系统核心
- 目录位置:
应用层 (Application Layer)
- 目录位置:
internal/application
- 主要作用:协调领域对象完成用例
- 主要内容 / 功能:
- 应用服务(Service)
- DTO(Data Transfer Object)
- 用例接口
- 特点:
- 调用领域层完成业务
- 暴露给接口层使用
- 不直接依赖数据库或框架
- 目录位置:
基础设施层 (Infrastructure Layer)
- 目录位置:
internal/infrastructure
- 主要作用:提供技术实现
- 主要内容 / 功能:
- 数据库实现
- 缓存
- 第三方服务
- 日志
- 仓储实现(Repository Implementation)
- 特点:
- 实现领域层接口
- 技术细节可替换,不影响业务逻辑
- 目录位置:
接口层 (Interface / Delivery Layer)
- 目录位置:
internal/interfaces
- 主要作用:对外暴露 API / 接口
- 主要内容 / 功能:
- HTTP Handler
- Router
- gRPC / CLI
- 特点:
- 接收请求,调用应用层处理,返回响应
- 通常依赖 Web 框架或协议
- 目录位置: