NavisworksTransport/doc/working/code_cleanup_plan.md
tian b048235657 阶段一:删除冗余的UIStateMachine
- 删除 src/Core/UIStateMachine.cs
- UIStateMachine和UIState枚举完全未使用
- 项目实际使用PathEditState作为状态管理
- 编译验证通过,无任何错误

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-30 22:17:48 +08:00

6.2 KiB
Raw Blame History

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

迁移策略

  1. 检查所有引用UIStateMachine的代码
  2. 将状态枚举UIState迁移到独立文件或PathPlanningModels
  3. 将状态转换逻辑简化为直接的状态变更
  4. 移除状态历史跟踪(过度设计)

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不需要

迁移步骤

  1. 检查PathAnimationManager中是否有LogisticsAnimationManager缺少的功能
  2. 将必要功能迁移到LogisticsAnimationManager
  3. 更新AnimationControlViewModel只使用LogisticsAnimationManager
  4. 删除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 明确标注的旧版代码

删除位置

  1. PathAnimationManager.cs

    • Line 143: public event EventHandler AnimationCompleted; - 旧版事件
    • Line 904: AnimationCompleted?.Invoke(this, EventArgs.Empty); - 触发旧版事件
    • 注释:"旧版,保留兼容性" / "保持兼容性"
  2. ModelSplitterManager.cs

    • Line 1584-1593: GenerateFileName(string layerName, SplitConfiguration config) 方法
    • 注释:"旧版本兼容性方法"
    • 方案删除此重载统一使用带Strategy参数的新版本
  3. LayerManagementViewModel.cs

    • Line 1712: 类似的GenerateFileName旧版方法
    • 统一使用新版本实现

4.2 清理原则

  • 遇到"旧版"、"兼容"、"fallback"等标注,直接删除
  • 不做任何"备用方案"或"容错处理"
  • 如有问题,让它快速暴露

五、辅助文件清理

5.1 临时文档

检查并删除

  • path_visualization_ui.txt - XAML代码片段确认已集成到代码后删除

5.2 不删除的文件

以下管理器使用率合理,保留:

  • PathInputMonitor (58次引用)
  • IdleEventManager (58次引用)
  • DocumentStateManager (58次引用)

执行计划

阶段一UI状态管理清理高风险

  1. 分析UIStateMachine所有引用点
  2. 迁移UIState枚举到PathPlanningModels
  3. 更新所有引用UIStateMachine的代码改用简单状态
  4. 删除UIStateMachine.cs
  5. 编译验证

阶段二:动画管理器合并(中风险)

  1. 对比两个动画管理器的功能差异
  2. 将PathAnimationManager独有功能迁移到LogisticsAnimationManager
  3. 更新AnimationControlViewModel
  4. 删除PathAnimationManager.cs
  5. 编译验证

阶段三WPF Services清理低风险

  1. 删除DataBindingBestPractices.cs
  2. 删除CrossViewModelSynchronizer.cs
  3. 删除VirtualizedObservableCollection.cs
  4. 编译验证

阶段四:向后兼容代码清理(低风险)

  1. 删除PathAnimationManager的AnimationCompleted事件及触发代码
  2. 删除ModelSplitterManager的旧版GenerateFileName
  3. 删除LayerManagementViewModel的旧版GenerateFileName
  4. 编译验证

阶段五:最终验证

  1. 完整编译
  2. 运行单元测试
  3. 删除path_visualization_ui.txt
  4. 更新CHANGELOG.md
  5. Git commit

预期效果

代码减少

  • 删除文件约8-10个
  • 减少代码行数约3000-5000行

架构改进

  • 消除UI状态管理的重复抽象
  • 统一动画管理接口
  • 移除未使用的优化工具
  • 清除所有向后兼容负担

风险评估

  • 高风险UI状态管理重构需要仔细测试
  • 中风险:动画管理器合并(可能影响现有功能)
  • 低风险删除未使用的Services和兼容代码

回滚策略

每个阶段完成后创建Git commit便于回滚

git commit -m "阶段X: [具体内容]"

如遇问题:

git revert HEAD  # 回滚最后一次提交