状态机是交易系统的神经系统。 它决定了:订单现在在哪,能去哪,不能去哪。 设计好状态机,非法的业务逻辑就无法执行。
在第一章,我们提到了一个判断标准:
交易域只记录"推动交易合同从一个履行步骤走向下一个履行步骤"的关键状态。
这句话,直接指导了状态机的设计原则:
原则 1:状态数量要克制
交易状态机不应该是一个反映"所有业务系统当前情况"的大杂烩。物流状态(配货中、揽件中、运输中、派送中)属于履约域,不属于交易域。交易域只需要知道"已发货"这一个履约事实,其余的物流细节不需要感知。
原则 2:状态语义要清晰
每个状态,代表一个清晰的业务语义,而不是系统内部的技术阶段。
比如,"CLOSED"和"CANCELLED"都是终态,但语义完全不同:
CANCELLED:订单在未完成支付时终止(合同没有完全激活就结束了)CLOSED:订单在支付后,经过完整的退货退款流程关闭(合同完整执行了,但被撤销了)这两个状态对结算的影响截然不同,必须区分。
原则 3:状态只能前进,不能后退
这是状态机最重要的约束。一旦订单进入某个状态,它只能推进到后续状态,不能回退。
这个约束的意义:状态是已发生事实的记录,事实不能被"撤销"。已付款的事实不能被"取消"(只能通过退款流程来处理),已发货的事实不能被"回退"(只能通过退货流程来处理)。