Skip to content

Files

Latest commit

 

History

History

fshop

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

FShop 项目文档

1. 项目简介

FShop 是一个基于 Go 语言开发的电商系统示例,采用 DDD(领域驱动设计)架构模式实现。该项目展示了一个包含商品管理、购物车、订单处理等基本电商功能的系统。本项目主要用于展示如何在实际项目中应用 DDD 架构,以及如何使用 Freedom Framework 构建高可维护性的企业级应用。

1.1 核心特性

  • 完整的电商业务流程实现
  • DDD架构的最佳实践示例
  • 领域事件驱动的业务处理
  • 完善的测试用例
  • 支持容器化部署
  • 高性能的缓存设计
  • 分布式追踪支持

1.2 项目依赖

# 必需组件
- Go 1.18+
- MySQL 5.7+
- Redis 6.0+
- Freedom Framework latest

# 可选组件
- Prometheus (用于监控)
- Docker (用于容器化部署)

2. 项目结构

fshop/
├── adapter/            # 适配器层
│   ├── controller/    # HTTP 控制器
│   │   ├── cart.go   # 购物车控制器
│   │   ├── goods.go  # 商品控制器
│   │   ├── order.go  # 订单控制器
│   │   └── delivery.go # 发货控制器
│   ├── repository/    # 数据仓储实现
│   │   ├── cart.go   # 购物车仓储
│   │   ├── goods.go  # 商品仓储
│   │   └── order.go  # 订单仓储
│   └── consumer/      # 消费者实现
│       └── consumer.go # 事件消费者
├── domain/            # 领域层
│   ├── aggregate/     # 聚合根
│   │   ├── cart_factory.go    # 购物车工厂
│   │   ├── shop_factory.go    # 购买工厂
│   │   └── order_factory.go   # 订单工厂
│   ├── entity/        # 实体
│   │   ├── cart.go   # 购物车实体
│   │   ├── goods.go  # 商品实体
│   │   └── order.go  # 订单实体
│   ├── vo/           # 值对象
│   │   ├── cart.go   # 购物车值对象
│   │   └── order.go  # 订单值对象
│   └── event/        # 领域事件
│       ├── shop.go   # 购买事件
│       └── order.go  # 订单事件
├── infra/            # 基础设施层
│   └── domainevent/  # 领域事件基础设施
├── server/           # 服务器配置和启动
│   └── conf/        # 配置文件
│       ├── config.toml  # TOML配置示例
│       └── config.yaml  # YAML配置示例
├── api_test/         # API 测试用例
├── fshop.sql        # 数据库脚本
└── Dockerfile       # Docker 构建文件

3. 核心功能模块

3.1 商品模块 (GoodsService)

3.1.1 主要功能

  • 商品的创建和管理
  • 商品库存管理
  • 商品标签管理
  • 商品列表查询
  • 商品库存增减

3.1.2 关键接口

// 商品相关 API
GET    /goods/items      # 获取商品列表
POST   /goods           # 添加商品
PUT    /goods/stock/:id/:num  # 增加库存
PUT    /goods/tag       # 为商品打标签
POST   /goods/shop      # 直接购买商品

3.1.3 示例请求

// 添加商品请求
POST /goods
{
    "name": "示例商品",
    "price": 9900,
    "stock": 100,
    "tag": "热销"
}

// 商品列表响应
GET /goods/items
{
    "items": [
        {
            "id": 1,
            "name": "示例商品",
            "price": 9900,
            "stock": 100,
            "tag": "热销"
        }
    ],
    "total": 1
}

3.2 购物车模块 (CartService)

3.2.1 主要功能

  • 添加商品到购物车
  • 查看购物车商品列表
  • 清空购物车
  • 购物车商品结算

3.2.2 关键接口

// 购物车相关 API
GET    /cart/items      # 获取购物车商品列表
POST   /cart           # 添加商品到购物车
DELETE /cart/all       # 清空购物车
POST   /cart/shop      # 购物车结算

3.2.3 示例请求

// 添加购物车
POST /cart
{
    "userId": 1,
    "goodsId": 1,
    "goodsNum": 2
}

// 购物车列表响应
GET /cart/items?userId=1
{
    "items": [
        {
            "goodsId": 1,
            "goodsName": "示例商品",
            "goodsNum": 2,
            "price": 9900
        }
    ]
}

3.3 订单模块 (OrderService)

3.3.1 主要功能

  • 订单创建
  • 订单支付
  • 订单发货
  • 订单列表查询

3.3.2 关键接口

// 订单相关 API
GET    /order/items     # 获取订单列表
POST   /order/pay      # 订单支付
POST   /delivery       # 订单发货

3.3.3 示例请求

// 订单支付
POST /order/pay
{
    "orderNo": "202312200001",
    "userId": 1
}

// 订单列表响应
GET /order/items?userId=1
{
    "orders": [
        {
            "orderNo": "202312200001",
            "totalPrice": 19800,
            "status": "待发货",
            "items": [
                {
                    "goodsId": 1,
                    "goodsName": "示例商品",
                    "num": 2
                }
            ]
        }
    ]
}

4. 领域驱动设计实现

4.1 聚合根设计

4.1.1 购物车聚合根

// CartFactory 示例
type CartFactory struct {
    UserRepo  dependency.UserRepo
    CartRepo  dependency.CartRepo
    GoodsRepo dependency.GoodsRepo
}

// 创建购物车聚合根
func (factory *CartFactory) NewCartAddCmd(goodsID, userID int) (*CartAddCmd, error) {
    // 实现细节...
}

4.1.2 订单聚合根

// OrderFactory 示例
type OrderFactory struct {
    OrderRepo dependency.OrderRepo
    UserRepo  dependency.UserRepo
}

// 创建订单聚合根
func (factory *OrderFactory) NewOrderPayCmd(orderNo string, userID int) (*OrderPayCmd, error) {
    // 实现细节...
}

4.2 领域事件

4.2.1 事件定义

// 购买商品事件
type ShopGoods struct {
    UserID    int
    OrderNO   string
    GoodsID   int
    GoodsNum  int
    GoodsName string
}

// 订单支付事件
type OrderPay struct {
    OrderNo string
    UserID  int
    Amount  int
}

4.2.2 事件处理

// 事件处理示例
func (g *GoodsService) ShopEvent(event *event.ShopGoods) error {
    // 处理购买事件...
    return nil
}

4.3 资源库模式

4.3.1 资源库接口

// 商品资源库接口
type GoodsRepo interface {
    Get(id int) (*entity.Goods, error)
    Save(goods *entity.Goods) error
    FindsByPage(page, pagesize int, tag string) ([]*entity.Goods, error)
}

4.3.2 实现示例

// 商品资源库实现
type GoodsRepository struct {
    freedom.Repository
}

func (repo *GoodsRepository) Get(id int) (*entity.Goods, error) {
    // 实现细节...
}

5. 技术特性

5.1 配置管理

5.1.1 TOML 配置示例

[db]
addr = "root:password@tcp(localhost:3306)/fshop?charset=utf8mb4"
max_open_conns = 16
max_idle_conns = 8

[redis]
addr = "localhost:6379"
pool_size = 32

5.1.2 YAML 配置示例

db:
  addr: "root:password@tcp(localhost:3306)/fshop?charset=utf8mb4"
  max_open_conns: 16
  max_idle_conns: 8

redis:
  addr: "localhost:6379"
  pool_size: 32

5.2 中间件集成

5.2.1 日志中间件

// 日志中间件示例
func LoggerMiddleware(ctx freedom.Context) {
    // 实现细节...
}

5.2.2 追踪中间件

// 追踪中间件示例
func TracingMiddleware(ctx freedom.Context) {
    // 实现细节...
}

5.3 事务处理

5.3.1 事务示例

// 购物车结算事务
func (cmd *CartShopCmd) Shop() error {
    return cmd.tx.Execute(func() error {
        // 1. 修改商品库存
        // 2. 清空购物车
        // 3. 创建订单
        // 4. 记录事件
        return nil
    })
}

6. 最佳实践

6.1 代码规范

  • 遵循 Go 官方代码规范
  • DDD 分层架构严格划分
  • 统一的错误处理机制
  • 完善的日志记录

6.2 监控告警

  • 接口响应时间监控
  • 错误率监控
  • 资源使用监控
  • 业务指标监控

7. 常见问题

7.1 安装部署

Q: 如何处理依赖问题? A: 使用 go mod tidy 更新依赖

Q: 配置文件找不到? A: 检查 FSHOP-CONFIG 环境变量

7.2 开发相关

Q: 如何添加新的 API? A: 在 controller 中添加新的处理方法,并在 init 中注册路由

Q: 如何处理并发问题? A: 使用事务和锁机制确保数据一致性

8. 总结

FShop 项目是一个基于 DDD 架构的电商系统示例,展示了如何在 Go 语言中实现领域驱动设计。项目结构清晰,代码组织合理,实现了电商系统的核心功能,并且提供了完善的测试用例和部署支持。通过这个项目,开发者可以学习到:

  1. DDD 架构在实际项目中的应用
  2. Go 语言企业级应用开发最佳实践
  3. 微服务设计和实现方法
  4. 高并发场景下的性能优化
  5. 分布式系统开发经验