Skip to content

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 框架或协议