状态转换:从传统模型到不可变对象的转变
1. 传统状态机模型
在企业资源规划(ERP)系统中,开发者需要识别实体在业务流程中经历的状态转换。他们会定义哪些状态转换是允许的,哪些是禁止的。每个转换用两个状态之间的箭头表示,代表流程中的一个步骤。开发者还会为这些步骤附加操作,以定制流程。
对于简单的状态机,这种模型是易于管理的。但随着系统变得越来越复杂,新特性的数量会与现有状态的数量相乘,导致状态管理变得困难。而且,实体的状态往往代表多个属性,这些属性有时相互作用,有时则不然。
例如,在订单处理中,发货和计费可以独立操作。发货部门处理订单时,状态向下移动;计费部门开具发票并收款时,状态横向移动。最终,状态会到达右下角。
当引入新特性(如补货订单)时,需要在状态图中添加新的状态。由于新特性与现有计费特性没有交互,新的转换具有相同的关联操作。但随着独立流程的增加,状态的组合爆炸问题会变得更加严重。
另外,取消订单和退货的处理方式也不同。取消订单主要由计费部门处理,因为产品尚未发货,发货部门只需确认订单状态的转变。而退货则由发货部门处理,需要重新入库商品。只有从“已发货并付款”到“已退货”的转换涉及计费部门,此时需要退款。
2. 并行状态机
为了缓解状态组合爆炸的问题,可以使用并行状态机。订单实体可以有两个状态:物流状态和财务状态。物流状态跟踪发货部门的处理过程,财务状态跟踪计费部门的处理过程。这两个状态机可以并行运行,因为这些过程可以独立进行。
当这些过程相互作用时,操作需要同时考虑两个状态。例如,当订单退货时,物流状态从“已发货”转变为“已退货”,同时需要考虑财务状态是否为“已付款”
超级会员免费看
订阅专栏 解锁全文
3984

被折叠的 条评论
为什么被折叠?



