10 KiB
10 KiB
代码重构规划文档
统计结果
超过300行的文件列表
| 文件路径 | 行数 | 优先级 | 状态 |
|---|---|---|---|
src/components/cstb/FpsTest.tsx |
1949 | 🔴 高 | 待重构 |
src/components/cstb/VideoSetting.tsx |
579 | 🟡 中 | 待重构 |
src/components/cstb/SteamUsers.tsx |
432 | 🟡 中 | 待重构 |
重构目标
- 组件封装:将大组件拆分为更小的、职责单一的组件
- 功能复用:提取可复用的逻辑和工具函数
- 文件拆分:将大文件拆分为多个小文件,提高可维护性
- 代码组织:按功能模块组织代码结构
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,extractFpsMetricstimestamp.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 重构(最高优先级)
- ✅ 创建目录结构和基础文件
- ✅ 提取工具函数到
utils/目录- ✅
vprof-parser.ts- VProf报告解析 - ✅
timestamp.ts- 时间戳处理 - ✅
fps-metrics.ts- FPS指标提取 - ✅
csv-export.ts- CSV导出功能
- ✅
- ✅ 提取自定义Hooks到
hooks/目录- ✅
useGameMonitor.ts- 游戏运行状态监控 - ✅
useHardwareInfo.ts- 硬件信息获取 - ⏳
useTestMonitor.ts- 测试结果监控(待完成) - ⏳
useBatchTest.ts- 批量测试逻辑(待完成)
- ✅
- ✅ 提取部分UI组件到
components/目录- ✅
NoteCell.tsx- 备注单元格组件 - ⏳
TestConfigPanel.tsx- 测试配置面板(待完成) - ⏳
ResolutionConfig.tsx- 分辨率配置(待完成) - ⏳
TestResultsTable.tsx- 测试结果表格(待完成) - ⏳
TestResultDisplay.tsx- 测试结果展示(待完成) - ⏳
BatchTestProgress.tsx- 批量测试进度(待完成)
- ✅
- ⏳ 提取服务层逻辑到
services/目录- ⏳
testRunner.ts- 测试执行服务(待完成) - ⏳
resultReader.ts- 结果读取服务(待完成)
- ⏳
- ⏳ 重构主组件,整合所有子模块(进行中)
- ✅ 创建类型定义文件
- ⏳ 完整重构主组件(需要继续)
- ⏳ 测试验证功能完整性(待完成)
阶段2: VideoSetting.tsx 重构
- ⏳ 提取配置数据
- ⏳ 提取自定义Hooks
- ⏳ 拆分编辑/查看组件
- ⏳ 重构主组件
阶段3: SteamUsers.tsx 重构
- ⏳ 提取用户项组件
- ⏳ 提取数据管理Hook
- ⏳ 重构主组件
重构原则
- 保持功能完整性:重构过程中确保所有功能正常工作
- 渐进式重构:分步骤进行,每步完成后验证
- 向后兼容:不改变对外接口,保持组件使用方式不变
- 代码复用:提取公共逻辑,避免重复代码
- 类型安全:保持TypeScript类型完整性
已完成的工作
FpsTest.tsx 重构进度
✅ 已完成
-
目录结构创建
- ✅
src/components/cstb/FpsTest/目录结构已创建
- ✅
-
常量提取
- ✅
constants.ts- BENCHMARK_MAPS, PRESET_RESOLUTIONS, TEST_TIMEOUT
- ✅
-
工具函数提取
- ✅
utils/vprof-parser.ts- parseVProfReport函数 - ✅
utils/timestamp.ts- compareTimestamps, formatCurrentTimestamp, timestampToISO - ✅
utils/fps-metrics.ts- extractFpsMetrics函数 - ✅
utils/csv-export.ts- handleExportCSV, handleExportAverageCSV, formatVideoSettingSummary
- ✅
-
自定义Hooks提取
- ✅
hooks/useGameMonitor.ts- 游戏运行状态监控 - ✅
hooks/useHardwareInfo.ts- 硬件信息获取
- ✅
-
组件提取
- ✅
components/NoteCell.tsx- 备注单元格组件
- ✅
-
类型定义
- ✅
types.ts- Resolution, BatchTestProgress, FpsMetrics, ResolutionGroupInfo
- ✅
⏳ 待完成
-
更多Hooks
hooks/useTestMonitor.ts- 测试结果文件监控逻辑hooks/useBatchTest.ts- 批量测试状态管理和执行逻辑
-
更多组件
components/TestConfigPanel.tsx- 测试地图、批量测试次数、备注配置components/ResolutionConfig.tsx- 分辨率设置组件components/TestResultsTable.tsx- 测试结果表格components/TestResultDisplay.tsx- 当前测试结果显示components/BatchTestProgress.tsx- 批量测试进度显示
-
服务层
services/testRunner.ts- 测试执行服务(runSingleTest, startTest)services/resultReader.ts- 结果读取服务(readResult)
-
主组件重构
- 使用提取的模块重构
index.tsx - 确保所有功能正常工作
- 使用提取的模块重构
注意事项
- 重构前确保有完整的测试覆盖(如果有)
- 重构过程中注意保持状态管理的一致性
- 提取Hook时注意依赖项的正确传递
- 组件拆分时注意props的类型定义
- 工具函数提取时注意副作用处理
- 重要: 原文件
FpsTest.tsx暂时保留,待重构完成并测试通过后再删除 - 当前状态: 已提取基础模块,主组件重构需要继续完成