# 礼物系统架构图 ## 系统整体架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 礼物系统架构 │ ├─────────────────────────────────────────────────────────────────┤ │ UI层 (Presentation Layer) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ XPSendGiftView │ │RoomAnimationView│ │GiftComboFlagView│ │ │ │ (发送界面) │ │ (动画容器) │ │ (连击标识) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ 业务逻辑层 (Business Logic Layer) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │XPGiftPresenter │ │GiftComboManager │ │GiftAnimationMgr │ │ │ │ (发送逻辑) │ │ (连击管理) │ │ (动画管理) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ 数据层 (Data Layer) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ XPGiftStorage │ │ Api+Gift │ │ GiftInfoModel │ │ │ │ (数据缓存) │ │ (网络请求) │ │ (数据模型) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ## 礼物发送流程 ``` 用户操作 ↓ ┌─────────────────┐ │ XPSendGiftView │ ← UI层:用户选择礼物、数量、接收者 └─────────────────┘ ↓ ┌─────────────────┐ │XPGiftPresenter │ ← 业务层:验证参数、处理业务逻辑 └─────────────────┘ ↓ ┌─────────────────┐ │ Api+Gift │ ← 数据层:发送网络请求 └─────────────────┘ ↓ ┌─────────────────┐ │ 服务器响应 │ ← 外部:处理礼物发送 └─────────────────┘ ↓ ┌─────────────────┐ │ 成功回调处理 │ ← 业务层:更新状态、触发动画 └─────────────────┘ ``` ## 礼物接收流程 ``` 网络消息 ↓ ┌─────────────────┐ │RoomAnimationView│ ← UI层:接收消息、分发处理 └─────────────────┘ ↓ ┌─────────────────┐ │GiftAnimationMgr │ ← 业务层:管理动画队列、控制播放 └─────────────────┘ ↓ ┌─────────────────┐ │GiftComboManager │ ← 业务层:处理连击逻辑、状态管理 └─────────────────┘ ↓ ┌─────────────────┐ │ 动画播放 │ ← UI层:SVGA/MP4/PAG动画渲染 └─────────────────┘ ``` ## 数据存储架构 ``` ┌─────────────────┐ │ XPGiftStorage │ ← 单例缓存管理器 └─────────────────┘ ↓ ┌─────────────────┐ │ roomGiftCache │ ← 房间礼物缓存 (NSCache) └─────────────────┘ ↓ ┌─────────────────┐ │roomGiftPanelTags│ ← 礼物面板缓存 (NSCache) └─────────────────┘ ↓ ┌─────────────────┐ │ GiftInfoModel │ ← 礼物数据模型 └─────────────────┘ ``` ## 礼物类型处理架构 ``` 礼物类型枚举 ↓ ┌─────────────────┐ │ GiftType │ ← 21种不同礼物类型 └─────────────────┘ ↓ ┌─────────────────┐ │ 类型分发处理 │ ← 根据类型选择不同处理逻辑 └─────────────────┘ ↓ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 普通礼物 │ │ 福袋礼物 │ │ VIP礼物 │ │ (标准流程) │ │ (特殊逻辑) │ │ (特权处理) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` ## 动画播放架构 ``` 动画请求 ↓ ┌─────────────────┐ │GiftAnimationMgr │ ← 动画管理器:队列管理、状态控制 └─────────────────┘ ↓ ┌─────────────────┐ │ 动画类型判断 │ ← 根据礼物类型选择动画方式 └─────────────────┘ ↓ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ SVGA动画 │ │ MP4动画 │ │ PAG动画 │ │ (vggUrl) │ │ (viewUrl) │ │ (viewUrl) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ↓ ┌─────────────────┐ │ 动画渲染 │ ← UI层:实际动画播放 └─────────────────┘ ``` ## 连击管理架构 ``` 连击触发 ↓ ┌─────────────────┐ │GiftComboManager │ ← 连击管理器:状态跟踪、队列管理 └─────────────────┘ ↓ ┌─────────────────┐ │ 网络请求队列 │ ← 管理发送请求的队列 └─────────────────┘ ↓ ┌─────────────────┐ │ UI动画队列 │ ← 管理UI更新的队列 └─────────────────┘ ↓ ┌─────────────────┐ │GiftComboFlagView│ ← UI层:连击标识显示 └─────────────────┘ ``` ## 可分离性分析图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 可分离性分析 │ ├─────────────────────────────────────────────────────────────────┤ │ 高可分离性 (可脱离UI使用) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ XPGiftStorage │ │ Api+Gift │ │ GiftInfoModel │ │ │ │ (数据缓存) │ │ (网络请求) │ │ (数据模型) │ │ │ │ 可分离度: 90% │ │ 可分离度: 95% │ │ 可分离度: 100% │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ 中等可分离性 (需要重构) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │XPGiftPresenter │ │GiftAnimationMgr │ │ 业务逻辑验证 │ │ │ │ (发送逻辑) │ │ (动画管理) │ │ (数据处理) │ │ │ │ 可分离度: 60% │ │ 可分离度: 40% │ │ 可分离度: 70% │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ 低可分离性 (UI强依赖) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ XPSendGiftView │ │RoomAnimationView│ │GiftComboManager │ │ │ │ (发送界面) │ │ (动画容器) │ │ (连击管理) │ │ │ │ 可分离度: 20% │ │ 可分离度: 10% │ │ 可分离度: 30% │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ## 重构建议架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 重构后架构 │ ├─────────────────────────────────────────────────────────────────┤ │ UI层 (Presentation Layer) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │GiftUIViewController│ │AnimationContainer│ │ComboUIView │ │ │ │ (纯UI展示) │ │ (动画容器) │ │ (连击UI) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ 业务逻辑层 (Business Logic Layer) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │GiftBusinessService│ │AnimationService │ │ComboService │ │ │ │ (业务逻辑) │ │ (动画逻辑) │ │ (连击逻辑) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ├─────────────────────────────────────────────────────────────────┤ │ 数据层 (Data Layer) │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │GiftDataService │ │NetworkService │ │CacheService │ │ │ │ (数据服务) │ │ (网络服务) │ │ (缓存服务) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ ``` ## 总结 ### 当前架构特点 1. **三层架构**: UI层、业务层、数据层基本分离 2. **职责混合**: 部分类承担了过多职责 3. **耦合度高**: UI与业务逻辑深度耦合 4. **扩展性差**: 新增功能需要修改多处代码 ### 重构目标 1. **清晰分层**: 每层职责明确,依赖关系清晰 2. **低耦合**: 通过协议和依赖注入降低耦合 3. **高内聚**: 每个类只负责一个核心功能 4. **易测试**: 业务逻辑可独立测试 5. **易扩展**: 新增功能只需修改对应层 ### 脱离UI使用可行性 - **完全可分离**: 数据层 (100%) - **部分可分离**: 业务层 (60-70%) - **难以分离**: UI层 (10-30%) 通过重构,可以将约70%的功能脱离UI使用,为未来的功能扩展和测试提供更好的基础。