Kata17:处理带状态的规则

(Kata17地址)[http://codekata.com/kata/kata17-more-business-rules/]

上一个Kata我们通过DSL解决了复杂规则的实现方法,这个Kata我们需要处理另一种规则:带状态的规则。

什么叫带状态的规则呢?显然重点是“状态”,看下面的例子:

1、商品加入购物车,如果点击下单进入2
2、下单,如果点击付款进入3,如果取消订单进入4
3、付款,如果付款成功进入5,如果付款失败进入6
4、取消订单
5、商品出库,发货,如果签收进入7,如果拒收进入8
6、提醒顾客再次付款
7、订单结束
8、售后负责处理

这是一个简化版的在线购物流程,我们可以看到每个规则,或者说每个阶段都有一个状态,不同状态之间又有一些关联关系,我们的任务就是要设计一套系统,可以实现带状态的规则并容易维护。

思路

我就直接说思路吧。

这里其实本质上是一个状态机,不明白的同学可以搜一下什么是状态机。状态机可以解决状态以及状态之间的跳转关系,有了状态机我们就可以实现从一个状态跳转到另一个状态。

但是状态机只是基础,我们在此基础之上还需要将每个规则或者说每个状态抽象成两个部分,第一部分是状态对应的行为,第二部分是状态跳转。

状态对应的行为就是跳转到本状态后需要做的事情,比如2中的下单,比如3中的付款,可以看作是“一次性”的,跳转到本状态后就执行。

状态跳转就是从本状态跳转到其他状态,这一般会是一个类似if语句的东西,不过跳转的条件多种多样,单独抽象成一个部分可以更好地进行隔离,把条件的多样性封装起来。

如果用面向对象来说的话就是三个类,Rule、Action和TransferCondition,思路很清晰了,具体的代码就不写了(我一点都不懒!),大家感兴趣的可以动手练习一下。

你可能感兴趣的:(Kata17:处理带状态的规则)