- 删除 src/Core/UIStateMachine.cs - UIStateMachine和UIState枚举完全未使用 - 项目实际使用PathEditState作为状态管理 - 编译验证通过,无任何错误 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
6.2 KiB
6.2 KiB
NavisworksTransport 代码清理方案
创建日期: 2025-09-30 目标: 清理冗余代码、消除重复功能、移除向后兼容逻辑
执行原则
遵循CLAUDE.md中的开发原则:
- ✅ 让问题快速暴露 > 让程序看起来正常运行
- ✅ 报错比静默失败好
- ✅ 最小化修改 > 复杂全面的逻辑
- ✅ 明确拒绝向后兼容性
一、UI状态管理冗余清理
1.1 问题分析
重复系统:
UIStateManager(src/Core/UIStateManager.cs) - 线程安全的UI更新队列机制UIStateMachine(src/Core/UIStateMachine.cs) - UI状态转换和历史跟踪
问题:
- 两者都是单例模式
- 都处理UI线程同步
- UIStateMachine依赖UIStateManager进行UI更新
- 造成双重抽象,增加复杂度
1.2 清理方案
保留: UIStateManager - 核心UI线程调度器
删除: UIStateMachine 及相关文件
- src/Core/UIStateMachine.cs
迁移策略:
- 检查所有引用UIStateMachine的代码
- 将状态枚举(UIState)迁移到独立文件或PathPlanningModels
- 将状态转换逻辑简化为直接的状态变更
- 移除状态历史跟踪(过度设计)
1.3 UIUpdate框架简化(可选)
问题:src/Core/UIUpdate/ 目录包含完整框架(8个文件),但实际使用率低
方案A(激进):删除整个UIUpdate框架,统一使用UIStateManager 方案B(保守):保留UIUpdateService核心,删除监控和复杂功能
建议:采用方案A - 当前项目规模不需要如此复杂的UI更新框架
二、动画管理器合并
2.1 问题分析
两个动画管理器:
PathAnimationManager- 基于Transform的通用动画LogisticsAnimationManager- 针对Navisworks 2026优化
使用情况:
- AnimationControlViewModel 同时实例化两者
- StartAnimationCommand 使用 LogisticsAnimationManager
- 功能有重叠
2.2 清理方案
保留: LogisticsAnimationManager - 符合2026专属策略
删除: PathAnimationManager 及相关代码
- src/Core/Animation/PathAnimationManager.cs
- AnimationFrame, AnimationState, CollisionPair 等辅助类(如果LogisticsAnimationManager不需要)
迁移步骤:
- 检查PathAnimationManager中是否有LogisticsAnimationManager缺少的功能
- 将必要功能迁移到LogisticsAnimationManager
- 更新AnimationControlViewModel只使用LogisticsAnimationManager
- 删除PathAnimationManager文件
三、WPF Services清理
3.1 零使用率类删除
立即删除:
DataBindingBestPractices(src/UI/WPF/Services/DataBindingBestPractices.cs) - 0次外部引用CrossViewModelSynchronizer(src/UI/WPF/Services/CrossViewModelSynchronizer.cs) - 仅被BestPractices使用
3.2 虚拟化集合(可选)
文件: src/UI/WPF/Collections/VirtualizedObservableCollection.cs
问题: 只被DataBindingBestPractices引用,无实际业务使用
建议: 删除(如果未来需要处理大数据集,重新实现更简单)
3.3 保留的Services
保留并继续使用:
SmartDataBindingOptimizer- ViewModelBase依赖BindingExpressionOptimizer- SmartDataBindingOptimizer依赖DataBindingPerformanceMonitor- 多处使用(可考虑简化)
四、向后兼容代码清理
4.1 明确标注的旧版代码
删除位置:
-
PathAnimationManager.cs
- Line 143:
public event EventHandler AnimationCompleted;- 旧版事件 - Line 904:
AnimationCompleted?.Invoke(this, EventArgs.Empty);- 触发旧版事件 - 注释:"旧版,保留兼容性" / "保持兼容性"
- Line 143:
-
ModelSplitterManager.cs
- Line 1584-1593:
GenerateFileName(string layerName, SplitConfiguration config)方法 - 注释:"旧版本兼容性方法"
- 方案:删除此重载,统一使用带Strategy参数的新版本
- Line 1584-1593:
-
LayerManagementViewModel.cs
- Line 1712: 类似的
GenerateFileName旧版方法 - 统一使用新版本实现
- Line 1712: 类似的
4.2 清理原则
- 遇到"旧版"、"兼容"、"fallback"等标注,直接删除
- 不做任何"备用方案"或"容错处理"
- 如有问题,让它快速暴露
五、辅助文件清理
5.1 临时文档
检查并删除:
path_visualization_ui.txt- XAML代码片段,确认已集成到代码后删除
5.2 不删除的文件
以下管理器使用率合理,保留:
- PathInputMonitor (58次引用)
- IdleEventManager (58次引用)
- DocumentStateManager (58次引用)
执行计划
阶段一:UI状态管理清理(高风险)
- 分析UIStateMachine所有引用点
- 迁移UIState枚举到PathPlanningModels
- 更新所有引用UIStateMachine的代码改用简单状态
- 删除UIStateMachine.cs
- 编译验证
阶段二:动画管理器合并(中风险)
- 对比两个动画管理器的功能差异
- 将PathAnimationManager独有功能迁移到LogisticsAnimationManager
- 更新AnimationControlViewModel
- 删除PathAnimationManager.cs
- 编译验证
阶段三:WPF Services清理(低风险)
- 删除DataBindingBestPractices.cs
- 删除CrossViewModelSynchronizer.cs
- 删除VirtualizedObservableCollection.cs
- 编译验证
阶段四:向后兼容代码清理(低风险)
- 删除PathAnimationManager的AnimationCompleted事件及触发代码
- 删除ModelSplitterManager的旧版GenerateFileName
- 删除LayerManagementViewModel的旧版GenerateFileName
- 编译验证
阶段五:最终验证
- 完整编译
- 运行单元测试
- 删除path_visualization_ui.txt
- 更新CHANGELOG.md
- Git commit
预期效果
代码减少:
- 删除文件:约8-10个
- 减少代码行数:约3000-5000行
架构改进:
- 消除UI状态管理的重复抽象
- 统一动画管理接口
- 移除未使用的优化工具
- 清除所有向后兼容负担
风险评估:
- 高风险:UI状态管理重构(需要仔细测试)
- 中风险:动画管理器合并(可能影响现有功能)
- 低风险:删除未使用的Services和兼容代码
回滚策略
每个阶段完成后创建Git commit,便于回滚:
git commit -m "阶段X: [具体内容]"
如遇问题:
git revert HEAD # 回滚最后一次提交