返回文章列表

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 里根本看不到。


下一阶段真正的挑战

  1. 状态迁移的灰度发布:生产环境如何渐进式切换?
  2. 监控与可观测性:FSM 状态变更需要 Tracing
  3. 回滚机制:数据库回滚比文件回滚复杂得多

代码写完了,仗才刚开始。


本篇是 FSM 重构系列的第 6 篇,前作见 Phase 1-4 回顾

觉得有帮助?请我喝杯咖啡

如果这篇文章对你有所帮助,欢迎扫码支持作者继续创作更多优质内容。

微信
微信
支付宝
支付宝

评论