📌 问题描述

订单状态包括”待支付、制作中、已完成、已取消”,如何用状态机模式实现状态流转,防止非法状态跳转?

✅ 回答要点

我会定义状态机,包含状态和事件(如”支付成功”、“开始制作”、“完成”、“取消”)。每个状态只允许特定事件触发转变。实现方式:

  • 简单场景:使用枚举+Map预定义允许的转移关系,在状态变更时校验。

  • 复杂场景:使用开源框架如Spring Statemachine、Squirrel State Machine。
    同时将状态机逻辑放在Service层,数据库订单表中存储当前状态,所有状态变更通过统一方法触发,更新前先校验合法性,并加乐观锁update ... where order_id=? and state=?防止并发乱跳。

🔗 相关知识

💡 记忆技巧

📚 参考资料