活动模块采用标准的模块化目录结构,便于代码组织和维护:
app/Module/Activity/
├── AdminControllers/ # 后台管理控制器
│ ├── Helper/ # 控制器辅助类
│ ├── Actions/ # 控制器动作类
│ └── LazyRenderable/ # 懒加载渲染类
├── Commands/ # 命令行工具
├── Databases/ # 数据库相关文件
│ └── GenerateSql/ # 数据库创建脚本
├── Dtos/ # 数据传输对象
├── Enums/ # 枚举类型定义
├── Events/ # 事件类
├── Exceptions/ # 异常类
├── Listeners/ # 事件监听器
├── Logics/ # 业务逻辑类
├── Models/ # 数据模型
├── Providers/ # 服务提供者
├── Repositorys/ # 数据仓库
├── Services/ # 服务类
└── Docs/ # 模块文档
活动模块的核心数据模型包括:
仓库层封装数据访问逻辑,提供统一的数据操作接口:
逻辑层包含核心业务逻辑,仅供模块内部使用:
服务层对外提供功能接口,是模块与外部交互的主要方式:
控制器层处理HTTP请求,提供后台管理界面:
活动模块定义了以下核心事件:
活动模块的设计遵循以下原则:
每个类只负责一个功能领域,如活动配置、奖励管理、参与记录等。
通过构造函数注入依赖,提高代码的可测试性和灵活性。
所有涉及多个操作的功能(如奖励发放)都使用数据库事务确保原子性。
关键操作(如活动状态变更、奖励发放)都有详细的日志记录,便于追踪和分析。
sequenceDiagram
管理员->>ActivityController: 提交活动创建表单
ActivityController->>ActivityManagementService: 创建活动
ActivityManagementService->>ActivityLogic: 处理活动创建逻辑
ActivityLogic->>ActivityConfigRepository: 保存活动配置
ActivityConfigRepository->>ActivityConfig: 创建记录
ActivityLogic->>EventDispatcher: 触发ActivityCreatedEvent
EventDispatcher->>ActivityCreatedListener: 处理后续操作
sequenceDiagram
用户->>ActivityService: 请求参与活动
ActivityService->>ActivityLogic: 检查参与条件
ActivityLogic->>ParticipationLogic: 处理参与逻辑
ParticipationLogic->>ActivityParticipationRepository: 记录参与情况
ParticipationLogic->>UserActivityDataRepository: 初始化用户进度
ActivityService->>EventDispatcher: 触发UserParticipatedEvent
sequenceDiagram
用户->>RewardService: 请求领取奖励
RewardService->>ActivityLogic: 验证领取条件
ActivityLogic->>RewardLogic: 计算实际奖励
RewardLogic->>ItemService: 发放物品奖励
RewardService->>ActivityParticipationRepository: 更新奖励状态
RewardService->>EventDispatcher: 触发RewardClaimedEvent
活动模块设计了良好的扩展机制,支持快速添加新的活动类型:
通过枚举类型定义活动类型,新增活动类型只需添加枚举值并实现对应的处理逻辑。
奖励系统支持多种奖励类型(物品、货币、经验等),可通过扩展奖励处理器来支持新的奖励类型。
活动参与条件和完成条件采用可配置的条件系统,支持组合多种条件类型,便于扩展新的条件类型。