21、状态转换:从传统模型到不可变对象的转变

状态转换:从传统模型到不可变对象的转变

1. 传统状态机模型

在企业资源规划(ERP)系统中,开发者需要识别实体在业务流程中经历的状态转换。他们会定义哪些状态转换是允许的,哪些是禁止的。每个转换用两个状态之间的箭头表示,代表流程中的一个步骤。开发者还会为这些步骤附加操作,以定制流程。

对于简单的状态机,这种模型是易于管理的。但随着系统变得越来越复杂,新特性的数量会与现有状态的数量相乘,导致状态管理变得困难。而且,实体的状态往往代表多个属性,这些属性有时相互作用,有时则不然。

例如,在订单处理中,发货和计费可以独立操作。发货部门处理订单时,状态向下移动;计费部门开具发票并收款时,状态横向移动。最终,状态会到达右下角。

当引入新特性(如补货订单)时,需要在状态图中添加新的状态。由于新特性与现有计费特性没有交互,新的转换具有相同的关联操作。但随着独立流程的增加,状态的组合爆炸问题会变得更加严重。

另外,取消订单和退货的处理方式也不同。取消订单主要由计费部门处理,因为产品尚未发货,发货部门只需确认订单状态的转变。而退货则由发货部门处理,需要重新入库商品。只有从“已发货并付款”到“已退货”的转换涉及计费部门,此时需要退款。

2. 并行状态机

为了缓解状态组合爆炸的问题,可以使用并行状态机。订单实体可以有两个状态:物流状态和财务状态。物流状态跟踪发货部门的处理过程,财务状态跟踪计费部门的处理过程。这两个状态机可以并行运行,因为这些过程可以独立进行。

当这些过程相互作用时,操作需要同时考虑两个状态。例如,当订单退货时,物流状态从“已发货”转变为“已退货”,同时需要考虑财务状态是否为“已付款”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值