Skip to content

Latest commit

 

History

History
54 lines (40 loc) · 2.33 KB

File metadata and controls

54 lines (40 loc) · 2.33 KB

SeewoHUB WPF 代码问题分析

总体评价

当前代码可以跑通最基础下载流程,但整体处于“功能堆叠 + 事件驱动直写”阶段,可维护性与可扩展性较弱。

主要问题

  1. UI 层与业务逻辑强耦合

    • 下载逻辑、配置写入、异常处理都放在 *.xaml.cs 事件中。
    • 导致后续很难做单元测试,也不利于功能复用。
  2. 全局静态状态过多

    • SettingsPage.Settings 为静态类,页面状态与全局状态耦合。
    • DownloadsPage.DownloadPath 也是静态属性,容易造成隐式共享和线程安全风险。
  3. 重复代码明显

    • 每个下载项都重复 try/catch + DownloadFileWithMultiThread + Growl.Success
    • 维护 URL、文件名和提示语时非常容易漏改。
  4. 容错与校验不足

    • 自定义下载未校验 URL 合法性与文件名合法性。
    • 下载目录存在性未显式保证。
    • 任意异常都直接拼接到 UI 错误提示,用户可读性差。
  5. 下载生命周期管理缺失

    • 创建了 CancellationTokenSource,但没有暴露取消入口和资源释放策略。
    • 无“下载中”禁用按钮、无进度展示、无并发策略。
  6. 配置持久化缺失

    • 线程数、路径在运行时内存中可用,但未稳定落盘。
    • 重启后设置丢失,影响用户体验。
  7. 架构层面建议

    • 建议转向 MVVM:
      • View: XAML 仅声明布局。
      • ViewModel: 命令与状态。
      • Service: 下载服务、配置服务、通知服务。
    • 下载项抽象为配置对象集合(名称、URL、目标文件、描述),循环执行,消除重复。

优先级建议(从高到低)

  1. 抽离下载服务和配置服务(先降低耦合)。
  2. 用下载项模型替换硬编码 if 分支(先去重复)。
  3. 增加输入校验与统一错误处理(先兜底)。
  4. 引入可取消与进度反馈(提升体验)。
  5. 再逐步迁移到 MVVM(中期演进)。

可落地的小步改造

  • 建一个 DownloadItem 模型:NameUrlTargetFileNameSelected
  • 按列表过滤 Selected 后统一下载;一处处理异常与通知。
  • UrlTextBoxExtraTextBox 先做 Uri.TryCreate + 文件名非法字符校验。
  • 程序启动时读取配置文件,设置页变更后节流写回。