一个基于领域驱动设计(DDD)的活动框架,支持多种活动玩法的快速开发和部署。
- 领域驱动设计:清晰的领域边界和职责划分
- 配置驱动:通过 JSON 配置文件定义活动
- 插件化设计:支持新玩法的快速接入
- 解耦设计:不依赖特定的UI框架或后端服务
- 状态管理:统一的活动状态管理机制
-
领域层(Domain Layer)
- 活动(Activity)领域
- 玩法(Game)领域
- 奖品(Prize)领域
- 参与(Participation)领域
-
应用层(Application Layer)
- 应用服务
- DTO对象
- 领域对象转换
-
基础设施层(Infrastructure Layer)
- 持久化实现
- 配置管理
- 公共组件
-
接口层(Interface Layer)
- HTTP接口
- RPC接口
- 中间件
-
活动(Activity)
- 活动生命周期管理
- 多玩法组合支持
- 统一的状态管理
-
玩法(Game)
- 可扩展的玩法接口
- 独立的业务逻辑
- 配置化支持
-
奖品(Prize)
- 统一的奖品模型
- 灵活的奖品发放机制
.
├── api/ # 接口层
│ ├── handler/ # HTTP处理器
│ ├── middleware/ # 中间件
│ ├── service/ # 应用服务
│ └── error.go # 错误定义
├── constant/ # 常量定义
│ └── constant.go # 错误码和消息
├── models/ # 业务模型
│ ├── activity_config.go # 活动配置
│ └── game_config.go # 玩法配置
├── storage/ # 基础设施层
│ └── mysql/
│ ├── entity/ # 数据实体
│ ├── repository/ # 仓储实现
│ └── migrations/ # 数据库迁移
├── config/ # 配置管理
├── main.go # 程序入口
└── README.md # 项目文档
活动配置示例:
{
"category": "community",
"version": "1.0",
"name": "社区活动",
"start_at": 1234567890,
"end_at": 1234567890,
"games": [
{
"type": "post",
"name": "发帖赢奖品",
"config": {
// 具体玩法配置
}
}
]
}
- 在
models
中定义活动配置结构 - 在
storage/mysql/entity
中定义数据实体 - 在
storage/mysql/repository
中实现仓储接口 - 在
api/service
中实现应用服务
- 在
models
中定义玩法配置结构 - 实现玩法特定的业务逻辑
- 定义玩法特定的配置结构
- 统一错误码定义在
constant/constant.go
- 错误处理工具在
api/error.go
- 应用层错误处理在
api/service