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 周,你会非常明显地从“写得慢”变成“写得稳且有把握”。