
- 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
237 lines
15 KiB
Markdown
237 lines
15 KiB
Markdown
# 礼物系统架构图
|
||
|
||
## 系统整体架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 礼物系统架构 │
|
||
├─────────────────────────────────────────────────────────────────┤
|
||
│ 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使用,为未来的功能扩展和测试提供更好的基础。
|