287 lines
10 KiB
Markdown
287 lines
10 KiB
Markdown
|
|
# 代码重构规划文档
|
|||
|
|
|
|||
|
|
## 统计结果
|
|||
|
|
|
|||
|
|
### 超过300行的文件列表
|
|||
|
|
|
|||
|
|
| 文件路径 | 行数 | 优先级 | 状态 |
|
|||
|
|
|---------|------|--------|------|
|
|||
|
|
| `src/components/cstb/FpsTest.tsx` | 1949 | 🔴 高 | 待重构 |
|
|||
|
|
| `src/components/cstb/VideoSetting.tsx` | 579 | 🟡 中 | 待重构 |
|
|||
|
|
| `src/components/cstb/SteamUsers.tsx` | 432 | 🟡 中 | 待重构 |
|
|||
|
|
|
|||
|
|
## 重构目标
|
|||
|
|
|
|||
|
|
1. **组件封装**:将大组件拆分为更小的、职责单一的组件
|
|||
|
|
2. **功能复用**:提取可复用的逻辑和工具函数
|
|||
|
|
3. **文件拆分**:将大文件拆分为多个小文件,提高可维护性
|
|||
|
|
4. **代码组织**:按功能模块组织代码结构
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. FpsTest.tsx (1949行) - 高优先级
|
|||
|
|
|
|||
|
|
### 问题分析
|
|||
|
|
- 文件过大,难以维护和调试
|
|||
|
|
- 包含多个职责:测试执行、结果读取、UI渲染、CSV导出等
|
|||
|
|
- 大量状态管理和副作用逻辑混在一起
|
|||
|
|
- 工具函数、常量、组件定义都在同一文件
|
|||
|
|
|
|||
|
|
### 重构方案
|
|||
|
|
|
|||
|
|
#### 1.1 文件结构拆分
|
|||
|
|
```
|
|||
|
|
src/components/cstb/FpsTest/
|
|||
|
|
├── index.tsx # 主组件(精简后约200行)
|
|||
|
|
├── types.ts # 类型定义
|
|||
|
|
├── constants.ts # 常量定义(BENCHMARK_MAPS, PRESET_RESOLUTIONS等)
|
|||
|
|
├── utils/
|
|||
|
|
│ ├── vprof-parser.ts # VProf报告解析工具
|
|||
|
|
│ ├── timestamp.ts # 时间戳处理工具
|
|||
|
|
│ ├── fps-metrics.ts # FPS指标提取工具
|
|||
|
|
│ └── csv-export.ts # CSV导出工具
|
|||
|
|
├── hooks/
|
|||
|
|
│ ├── useGameMonitor.ts # 游戏运行状态监控
|
|||
|
|
│ ├── useTestMonitor.ts # 测试结果监控
|
|||
|
|
│ ├── useBatchTest.ts # 批量测试逻辑
|
|||
|
|
│ └── useHardwareInfo.ts # 硬件信息获取
|
|||
|
|
├── components/
|
|||
|
|
│ ├── TestConfigPanel.tsx # 测试配置面板
|
|||
|
|
│ ├── ResolutionConfig.tsx # 分辨率配置组件
|
|||
|
|
│ ├── TestResultsTable.tsx # 测试结果表格
|
|||
|
|
│ ├── TestResultDisplay.tsx # 测试结果展示
|
|||
|
|
│ ├── BatchTestProgress.tsx # 批量测试进度
|
|||
|
|
│ └── NoteCell.tsx # 备注单元格
|
|||
|
|
└── services/
|
|||
|
|
├── testRunner.ts # 测试执行服务
|
|||
|
|
└── resultReader.ts # 结果读取服务
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 1.2 功能模块拆分
|
|||
|
|
|
|||
|
|
**工具函数模块 (utils/)**
|
|||
|
|
- `vprof-parser.ts`: `parseVProfReport`, `extractFpsMetrics`
|
|||
|
|
- `timestamp.ts`: `compareTimestamps`, 时间戳格式化
|
|||
|
|
- `fps-metrics.ts`: FPS相关计算和格式化
|
|||
|
|
- `csv-export.ts`: `handleExportCSV`, `handleExportAverageCSV`
|
|||
|
|
|
|||
|
|
**自定义Hooks (hooks/)**
|
|||
|
|
- `useGameMonitor.ts`: 游戏运行状态检测和监控
|
|||
|
|
- `useTestMonitor.ts`: 测试结果文件监控逻辑
|
|||
|
|
- `useBatchTest.ts`: 批量测试状态管理和执行逻辑
|
|||
|
|
- `useHardwareInfo.ts`: 硬件信息获取和管理
|
|||
|
|
|
|||
|
|
**组件拆分 (components/)**
|
|||
|
|
- `TestConfigPanel.tsx`: 测试地图、批量测试次数、备注配置
|
|||
|
|
- `ResolutionConfig.tsx`: 分辨率设置、全屏/窗口化、分辨率组管理
|
|||
|
|
- `TestResultsTable.tsx`: 测试结果表格展示(包含删除、编辑备注)
|
|||
|
|
- `TestResultDisplay.tsx`: 当前测试结果显示(时间戳、avg、p1)
|
|||
|
|
- `BatchTestProgress.tsx`: 批量测试进度显示组件
|
|||
|
|
- `NoteCell.tsx`: 备注单元格组件
|
|||
|
|
|
|||
|
|
**服务层 (services/)**
|
|||
|
|
- `testRunner.ts`: `runSingleTest`, `startTest` 等测试执行逻辑
|
|||
|
|
- `resultReader.ts`: `readResult` 结果读取逻辑
|
|||
|
|
|
|||
|
|
#### 1.3 预期效果
|
|||
|
|
- 主组件文件从1949行减少到约200行
|
|||
|
|
- 每个子文件控制在100-300行以内
|
|||
|
|
- 提高代码可维护性和可测试性
|
|||
|
|
- 便于功能扩展和bug修复
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. VideoSetting.tsx (579行) - 中优先级
|
|||
|
|
|
|||
|
|
### 问题分析
|
|||
|
|
- 视频设置配置数组过长(约200行)
|
|||
|
|
- 编辑/只读模式切换逻辑复杂
|
|||
|
|
- 文件监听和自动刷新逻辑可以提取
|
|||
|
|
|
|||
|
|
### 重构方案
|
|||
|
|
|
|||
|
|
#### 2.1 文件结构拆分
|
|||
|
|
```
|
|||
|
|
src/components/cstb/VideoSetting/
|
|||
|
|
├── index.tsx # 主组件(精简后约200行)
|
|||
|
|
├── types.ts # 类型定义
|
|||
|
|
├── config/
|
|||
|
|
│ └── videoSettingsConfig.ts # 视频设置配置数组
|
|||
|
|
├── hooks/
|
|||
|
|
│ ├── useVideoConfig.ts # 视频配置读取/写入
|
|||
|
|
│ ├── useFileWatcher.ts # 文件监听逻辑
|
|||
|
|
│ └── useGameRunning.ts # 游戏运行状态检测
|
|||
|
|
└── components/
|
|||
|
|
├── VideoSettingsEditor.tsx # 编辑模式组件
|
|||
|
|
└── VideoSettingsViewer.tsx # 只读模式组件
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2.2 功能模块拆分
|
|||
|
|
|
|||
|
|
**配置模块 (config/)**
|
|||
|
|
- `videoSettingsConfig.ts`: 提取 `videoSettings` 函数和配置数组
|
|||
|
|
|
|||
|
|
**自定义Hooks (hooks/)**
|
|||
|
|
- `useVideoConfig.ts`: 视频配置的读取、写入、刷新逻辑
|
|||
|
|
- `useFileWatcher.ts`: 文件变动监听和自动刷新
|
|||
|
|
- `useGameRunning.ts`: 游戏运行状态检测(可复用)
|
|||
|
|
|
|||
|
|
**组件拆分 (components/)**
|
|||
|
|
- `VideoSettingsEditor.tsx`: 编辑模式下的所有控件
|
|||
|
|
- `VideoSettingsViewer.tsx`: 只读模式下的展示
|
|||
|
|
|
|||
|
|
#### 2.3 预期效果
|
|||
|
|
- 主组件文件从579行减少到约200行
|
|||
|
|
- 配置数据独立管理,便于维护
|
|||
|
|
- 编辑/查看逻辑分离,代码更清晰
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. SteamUsers.tsx (432行) - 中优先级
|
|||
|
|
|
|||
|
|
### 问题分析
|
|||
|
|
- 三种视图模式的渲染逻辑重复
|
|||
|
|
- 用户项渲染函数较长
|
|||
|
|
- 可以提取为独立组件
|
|||
|
|
|
|||
|
|
### 重构方案
|
|||
|
|
|
|||
|
|
#### 3.1 文件结构拆分
|
|||
|
|
```
|
|||
|
|
src/components/cstb/SteamUsers/
|
|||
|
|
├── index.tsx # 主组件(精简后约150行)
|
|||
|
|
├── types.ts # 类型定义
|
|||
|
|
├── components/
|
|||
|
|
│ ├── UserCard.tsx # 卡片视图用户项
|
|||
|
|
│ ├── UserListItem.tsx # 列表视图用户项
|
|||
|
|
│ └── UserListLargeItem.tsx # 大列表视图用户项
|
|||
|
|
└── hooks/
|
|||
|
|
└── useSteamUsers.ts # 用户数据获取和管理
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3.2 功能模块拆分
|
|||
|
|
|
|||
|
|
**组件拆分 (components/)**
|
|||
|
|
- `UserCard.tsx`: 卡片样式用户项组件
|
|||
|
|
- `UserListItem.tsx`: 列表样式用户项组件
|
|||
|
|
- `UserListLargeItem.tsx`: 大列表样式用户项组件
|
|||
|
|
|
|||
|
|
**自定义Hooks (hooks/)**
|
|||
|
|
- `useSteamUsers.ts`: 用户数据获取、刷新、模拟数据逻辑
|
|||
|
|
|
|||
|
|
#### 3.3 预期效果
|
|||
|
|
- 主组件文件从432行减少到约150行
|
|||
|
|
- 每种视图模式独立组件,便于维护
|
|||
|
|
- 减少代码重复
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 重构执行计划
|
|||
|
|
|
|||
|
|
### 阶段1: FpsTest.tsx 重构(最高优先级)
|
|||
|
|
1. ✅ 创建目录结构和基础文件
|
|||
|
|
2. ✅ 提取工具函数到 `utils/` 目录
|
|||
|
|
- ✅ `vprof-parser.ts` - VProf报告解析
|
|||
|
|
- ✅ `timestamp.ts` - 时间戳处理
|
|||
|
|
- ✅ `fps-metrics.ts` - FPS指标提取
|
|||
|
|
- ✅ `csv-export.ts` - CSV导出功能
|
|||
|
|
3. ✅ 提取自定义Hooks到 `hooks/` 目录
|
|||
|
|
- ✅ `useGameMonitor.ts` - 游戏运行状态监控
|
|||
|
|
- ✅ `useHardwareInfo.ts` - 硬件信息获取
|
|||
|
|
- ⏳ `useTestMonitor.ts` - 测试结果监控(待完成)
|
|||
|
|
- ⏳ `useBatchTest.ts` - 批量测试逻辑(待完成)
|
|||
|
|
4. ✅ 提取部分UI组件到 `components/` 目录
|
|||
|
|
- ✅ `NoteCell.tsx` - 备注单元格组件
|
|||
|
|
- ⏳ `TestConfigPanel.tsx` - 测试配置面板(待完成)
|
|||
|
|
- ⏳ `ResolutionConfig.tsx` - 分辨率配置(待完成)
|
|||
|
|
- ⏳ `TestResultsTable.tsx` - 测试结果表格(待完成)
|
|||
|
|
- ⏳ `TestResultDisplay.tsx` - 测试结果展示(待完成)
|
|||
|
|
- ⏳ `BatchTestProgress.tsx` - 批量测试进度(待完成)
|
|||
|
|
5. ⏳ 提取服务层逻辑到 `services/` 目录
|
|||
|
|
- ⏳ `testRunner.ts` - 测试执行服务(待完成)
|
|||
|
|
- ⏳ `resultReader.ts` - 结果读取服务(待完成)
|
|||
|
|
6. ⏳ 重构主组件,整合所有子模块(进行中)
|
|||
|
|
- ✅ 创建类型定义文件
|
|||
|
|
- ⏳ 完整重构主组件(需要继续)
|
|||
|
|
7. ⏳ 测试验证功能完整性(待完成)
|
|||
|
|
|
|||
|
|
### 阶段2: VideoSetting.tsx 重构
|
|||
|
|
1. ⏳ 提取配置数据
|
|||
|
|
2. ⏳ 提取自定义Hooks
|
|||
|
|
3. ⏳ 拆分编辑/查看组件
|
|||
|
|
4. ⏳ 重构主组件
|
|||
|
|
|
|||
|
|
### 阶段3: SteamUsers.tsx 重构
|
|||
|
|
1. ⏳ 提取用户项组件
|
|||
|
|
2. ⏳ 提取数据管理Hook
|
|||
|
|
3. ⏳ 重构主组件
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 重构原则
|
|||
|
|
|
|||
|
|
1. **保持功能完整性**:重构过程中确保所有功能正常工作
|
|||
|
|
2. **渐进式重构**:分步骤进行,每步完成后验证
|
|||
|
|
3. **向后兼容**:不改变对外接口,保持组件使用方式不变
|
|||
|
|
4. **代码复用**:提取公共逻辑,避免重复代码
|
|||
|
|
5. **类型安全**:保持TypeScript类型完整性
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 已完成的工作
|
|||
|
|
|
|||
|
|
### FpsTest.tsx 重构进度
|
|||
|
|
|
|||
|
|
#### ✅ 已完成
|
|||
|
|
1. **目录结构创建**
|
|||
|
|
- ✅ `src/components/cstb/FpsTest/` 目录结构已创建
|
|||
|
|
|
|||
|
|
2. **常量提取**
|
|||
|
|
- ✅ `constants.ts` - BENCHMARK_MAPS, PRESET_RESOLUTIONS, TEST_TIMEOUT
|
|||
|
|
|
|||
|
|
3. **工具函数提取**
|
|||
|
|
- ✅ `utils/vprof-parser.ts` - parseVProfReport函数
|
|||
|
|
- ✅ `utils/timestamp.ts` - compareTimestamps, formatCurrentTimestamp, timestampToISO
|
|||
|
|
- ✅ `utils/fps-metrics.ts` - extractFpsMetrics函数
|
|||
|
|
- ✅ `utils/csv-export.ts` - handleExportCSV, handleExportAverageCSV, formatVideoSettingSummary
|
|||
|
|
|
|||
|
|
4. **自定义Hooks提取**
|
|||
|
|
- ✅ `hooks/useGameMonitor.ts` - 游戏运行状态监控
|
|||
|
|
- ✅ `hooks/useHardwareInfo.ts` - 硬件信息获取
|
|||
|
|
|
|||
|
|
5. **组件提取**
|
|||
|
|
- ✅ `components/NoteCell.tsx` - 备注单元格组件
|
|||
|
|
|
|||
|
|
6. **类型定义**
|
|||
|
|
- ✅ `types.ts` - Resolution, BatchTestProgress, FpsMetrics, ResolutionGroupInfo
|
|||
|
|
|
|||
|
|
#### ⏳ 待完成
|
|||
|
|
1. **更多Hooks**
|
|||
|
|
- `hooks/useTestMonitor.ts` - 测试结果文件监控逻辑
|
|||
|
|
- `hooks/useBatchTest.ts` - 批量测试状态管理和执行逻辑
|
|||
|
|
|
|||
|
|
2. **更多组件**
|
|||
|
|
- `components/TestConfigPanel.tsx` - 测试地图、批量测试次数、备注配置
|
|||
|
|
- `components/ResolutionConfig.tsx` - 分辨率设置组件
|
|||
|
|
- `components/TestResultsTable.tsx` - 测试结果表格
|
|||
|
|
- `components/TestResultDisplay.tsx` - 当前测试结果显示
|
|||
|
|
- `components/BatchTestProgress.tsx` - 批量测试进度显示
|
|||
|
|
|
|||
|
|
3. **服务层**
|
|||
|
|
- `services/testRunner.ts` - 测试执行服务(runSingleTest, startTest)
|
|||
|
|
- `services/resultReader.ts` - 结果读取服务(readResult)
|
|||
|
|
|
|||
|
|
4. **主组件重构**
|
|||
|
|
- 使用提取的模块重构 `index.tsx`
|
|||
|
|
- 确保所有功能正常工作
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 重构前确保有完整的测试覆盖(如果有)
|
|||
|
|
2. 重构过程中注意保持状态管理的一致性
|
|||
|
|
3. 提取Hook时注意依赖项的正确传递
|
|||
|
|
4. 组件拆分时注意props的类型定义
|
|||
|
|
5. 工具函数提取时注意副作用处理
|
|||
|
|
6. **重要**: 原文件 `FpsTest.tsx` 暂时保留,待重构完成并测试通过后再删除
|
|||
|
|
7. **当前状态**: 已提取基础模块,主组件重构需要继续完成
|