09 练习清单与进阶路线(把 Rust 用熟)

本章目标

  • 给你一条“可持续推进”的练习路线:每次 30-90 分钟,小步可验证。
  • 让你在 asset-light 这个真实项目里,逐步从“能改”到“改得稳、改得优雅”。

1. 你已经具备的能力(完成前 8 章后)

如果你已经按顺序读完并至少做过每章 1 个练习,你应该能:

  • 看懂模块树,能新增模块/文件并正确挂载
  • 用所有权/借用解决常见编译错误
  • 读懂并扩展 struct/enum/derive/Option/Result
  • 能在 rusqlite 里新增查询/更新逻辑
  • 能在 Dioxus 里新增页面/组件并接入路由与导航

2. 练习路线(从 P0 到 P2)

P0(1-2 天):把“工程节奏”练熟

目标:形成稳定开发闭环(fmt → check → run)。

  • 练习 1:新增 Settings 页面并接入 Sidebar(08 章练习 A)
  • 练习 2:给 VehicleType 实现 Display(05 章练习 A)
  • 练习 3:把一个 unwrap_or_default() 改成显式错误(06 章练习 A)

验收标准:

  • 每次改动后能 cargo check 通过
  • 能解释每个改动在模块树中的位置

P1(3-5 天):把“数据一致性与错误反馈”做扎实

目标:让 app 更像产品,而不是 demo。

  • 练习 4:给 SnapshotRepository::create 增加事务(07 章练习 B)
  • 练习 5:把错误展示到 UI(08 章练习 B)
  • 练习 6:给 Asset 增加 validate() 并在表单保存前校验(05 章练习 B + 06 章)

验收标准:

  • 创建快照不会出现半写入
  • 用户能在 UI 看到明确错误提示(而不是只看控制台)
  • 表单能拦截明显不合法输入(例如 sub_asset_class 与 category 不匹配)

P2(1-2 周):工程化升级(选做,但非常适合学习)

目标:把项目从“能用”升级为“可维护、可演进”。

  • 练习 7:引入 AppError(thiserror),逐步替换 Result<T, String>(06 章练习 B)
  • 练习 8:补一套最小集成测试(DB + Repository)(07 章练习 C)
  • 练习 9:把 HomePage 的 loaded-flag 加载方式改成 use_effect(08 章练习 C)
  • 练习 10:为导出/备份准备接口(例如导出 JSON/CSV)(产品向扩展)

验收标准:

  • DB 层错误类型结构化,可定位、可分支处理
  • 有基本测试护航,重构不慌
  • 页面加载逻辑不会出现重复执行/难排查副作用

3. 你下一步应该读什么(学习素材建议)

按你在项目里遇到的困难选择阅读方向:

  • 如果你经常卡在 borrow:继续加强所有权/借用(04),同时练习缩小借用作用域
  • 如果你经常卡在类型转换:加强建模(05)与错误处理(06),让解析失败显式化
  • 如果你想提升工程质量:把 Result<T, String> 升级为 AppError,并补测试
  • 如果你想提升 UI 组织:把样式与组件拆分更清晰,减少页面文件过长

4. 一个推荐的“每周节奏”(适合持续学习)

  • 周一/周二:做 1 个 P0 练习 + 复盘编译器报错(把报错记成笔记)
  • 周三/周四:做 1 个 P1 练习(事务/校验/错误 UI)
  • 周末:做 1 个 P2 练习(错误类型/测试/重构)

坚持 2-4 周,你会非常明显地从“写得慢”变成“写得稳且有把握”。