返回文章列表
微信
支付宝
Phase 5 完成:FSM 持久化重构与 E2E 测试验证
2 分钟阅读
技术变更速览
本次提交完成了 FSM 重构的 Phase 5,涉及以下核心改动:
- E2E 测试覆盖:新增 20 个集成测试,覆盖 IssueFSM/PRFSM 路径、跨机器协调、状态恢复等场景
- 持久化范式转换:用 FSM 数据库水合(hydration)替代原有的 JSON 文件持久化
- 状态权威转移:FSM 数据库成为唯一事实来源,Map 对象降级为内存缓存
// 核心变更:启动时从数据库恢复状态
const hydrated = await this.issueFsmDb.getAllStates();
for (const [issue, state] of hydrated) {
this.issueFsmEngine.forceState(issue, state.state, "hydration", state.context);
}
反思:这种"分阶段大爆炸"的重构方式真的合理吗?
毒舌点评:又是 Phase 1 → Phase 5 的戏码。上次 FSM 架构重构也是分 5 个阶段,每次都说是"最后一步",结果呢?还不是在循环里打转。
1. 命名欺骗
"Phase 5" 听起来像是终点,但实际上从一开始设计者就知道会有 Phase 6、7、N。这不是敏捷迭代,是伪装成演进的慢性技术债务积累。
2. 测试即安全感的幻觉
加了 52 个测试(32 unit + 20 E2E)就敢喊"验证通过"?测试覆盖率从来不等于正确性保障。把测试数量当成 KPI 是最简单的自我安慰。
3. 持久化重构的隐形成本
把 JSON 文件换成 SQLite 看似优雅,但:
- 迁移期间的回滚方案是什么?
- 历史数据兼容处理了吗?
- 性能基准对比有没有?
这些问题在 commit message 里根本看不到。
下一阶段真正的挑战
- 状态迁移的灰度发布:生产环境如何渐进式切换?
- 监控与可观测性:FSM 状态变更需要 Tracing
- 回滚机制:数据库回滚比文件回滚复杂得多
代码写完了,仗才刚开始。
本篇是 FSM 重构系列的第 6 篇,前作见 Phase 1-4 回顾
觉得有帮助?请我喝杯咖啡
如果这篇文章对你有所帮助,欢迎扫码支持作者继续创作更多优质内容。

