
- 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
15 KiB
15 KiB
礼物系统架构图
系统整体架构
┌─────────────────────────────────────────────────────────────────┐
│ 礼物系统架构 │
├─────────────────────────────────────────────────────────────────┤
│ 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 │ │
│ │ (数据服务) │ │ (网络服务) │ │ (缓存服务) │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
总结
当前架构特点
- 三层架构: UI层、业务层、数据层基本分离
- 职责混合: 部分类承担了过多职责
- 耦合度高: UI与业务逻辑深度耦合
- 扩展性差: 新增功能需要修改多处代码
重构目标
- 清晰分层: 每层职责明确,依赖关系清晰
- 低耦合: 通过协议和依赖注入降低耦合
- 高内聚: 每个类只负责一个核心功能
- 易测试: 业务逻辑可独立测试
- 易扩展: 新增功能只需修改对应层
脱离UI使用可行性
- 完全可分离: 数据层 (100%)
- 部分可分离: 业务层 (60-70%)
- 难以分离: UI层 (10-30%)
通过重构,可以将约70%的功能脱离UI使用,为未来的功能扩展和测试提供更好的基础。