Files
real-e-party-iOS/gift_system_architecture.md
edwinQQQ a35a711be6 chore: Initial clean commit
- Removed YuMi/Library/ (138 MB, not tracked)
- Removed YuMi/Resources/ (23 MB, not tracked)
- Removed old version assets (566 files, not tracked)
- Excluded Pods/, xcuserdata/ and other build artifacts
- Clean repository optimized for company server deployment
2025-10-09 16:19:14 +08:00

15 KiB
Raw Permalink Blame History

礼物系统架构图

系统整体架构

┌─────────────────────────────────────────────────────────────────┐
│                        礼物系统架构                              │
├─────────────────────────────────────────────────────────────────┤
│  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使用为未来的功能扩展和测试提供更好的基础。