logo
0
0
Login

DDD电子商务示例项目

这是一个使用领域驱动设计(DDD)模式构建的Go电子商务示例项目。该项目展示了如何使用DDD的核心概念构建一个具有良好架构的应用程序。

技术栈

  • Go 1.22.5
  • Gin Web框架
  • GORM ORM框架
  • MySQL数据库
  • Zap日志库

项目结构

项目遵循DDD的分层架构:

ddd-ecommerce-example/ ├── cmd/ # 应用程序入口 │ └── main.go # 主程序 ├── internal/ # 内部包 │ ├── domain/ # 领域层 │ │ ├── common.go # 通用定义 │ │ ├── order/ # 订单领域 │ │ ├── product/ # 产品领域 │ │ ├── user/ # 用户领域 │ │ └── order_service.go # 领域服务 │ ├── application/ # 应用层 │ │ ├── order_service.go # 订单应用服务 │ │ ├── product_service.go # 产品应用服务 │ │ └── user_service.go # 用户应用服务 │ ├── infrastructure/ # 基础设施层 │ │ ├── db_migrator.go # 数据库迁移工具 │ │ ├── order_repository_gorm.go # 订单仓储GORM实现 │ │ ├── product_repository_gorm.go # 产品仓储GORM实现 │ │ └── user_repository_gorm.go # 用户仓储GORM实现 │ ├── interfaces/ # 接口层 │ │ ├── base_handler.go # 基础处理程序 │ │ ├── order_handler.go # 订单处理程序 │ │ ├── product_handler.go # 产品处理程序 │ │ └── user_handler.go # 用户处理程序 │ └── config/ # 配置 │ └── config.go # 配置定义 └── go.mod # Go模块定义

领域模型

项目包含三个核心领域模型:

  1. 用户(User) - 表示系统中的用户,包含用户信息和地址
  2. 产品(Product) - 表示系统中的商品,包含名称、描述、价格和库存信息
  3. 订单(Order) - 表示用户的订单,包含订单项、总价和状态

环境变量

应用程序使用以下环境变量进行配置:

  • DB_HOST - 数据库主机 (默认: localhost)
  • DB_PORT - 数据库端口 (默认: 3306)
  • DB_USER - 数据库用户名 (默认: root)
  • DB_PASSWORD - 数据库密码 (默认: password)
  • DB_NAME - 数据库名称 (默认: ddd_ecommerce)
  • SERVER_PORT - 服务器端口 (默认: 8080)

运行项目

前提条件

  • Go 1.22.5或更高版本
  • MySQL数据库

步骤

  1. 克隆仓库
  2. 创建MySQL数据库
    CREATE DATABASE ddd_ecommerce;
  3. 设置环境变量或使用默认值
  4. 运行应用程序
    go run cmd/main.go

API端点

用户API

  • POST /users - 创建用户
  • GET /users/:id - 获取用户
  • GET /users/email/:email - 通过Email获取用户
  • PUT /users/:id/address - 更新用户地址
  • PUT /users/:id/name - 更新用户名称
  • DELETE /users/:id - 删除用户

产品API

  • POST /products - 创建产品
  • GET /products/:id - 获取产品
  • GET /products - 获取所有产品
  • PUT /products/:id/inventory - 更新产品库存
  • DELETE /products/:id - 删除产品

订单API

  • POST /orders - 创建订单
  • GET /orders/:id - 获取订单
  • GET /orders/user/:userId - 获取用户订单
  • PUT /orders/:id/process - 处理订单
  • PUT /orders/:id/cancel - 取消订单

DDD模式应用

本项目应用了以下DDD模式:

  • 实体(Entity) - User, Product, Order
  • 值对象(Value Object) - Money, Address, Email, SKU
  • 聚合(Aggregate) - Order聚合包含OrderItem
  • 仓储(Repository) - UserRepository, ProductRepository, OrderRepository
  • 领域服务(Domain Service) - OrderService
  • 应用服务(Application Service) - UserApplicationService, ProductApplicationService, OrderApplicationService

生产级特性

  • 日志 - 使用Zap日志库进行结构化日志记录
  • 数据库 - 使用MySQL数据库和GORM ORM框架
  • Web框架 - 使用Gin框架处理HTTP请求
  • 优雅关闭 - 支持优雅关闭服务器
  • 数据库迁移 - 自动创建数据库表结构
  • 初始数据 - 自动填充示例数据