easyfsm。以前看过信良哥的go-fsm-order,感觉还不错。最近在迁移项目的时候,发现很多业务存在一些状态转移,所以基于go-fsm-order重新构建,这样可以在不同的业务场景下使用。为什么不用looplab/fsm,星号还挺多的。我不太喜欢它。每次实例化fsm,都需要重传相应的事件(虽然我们可以统一封装)。希望在项目启动时,将不同业务操作涉及的状态机传递注册到fsm,对应:不同业务->[Status]->[Event]->处理事件体(包括handler、params、钩子、观察者等)。这就是easyfsm的由来。当你启动状态流时,你只需要:为什么需要区分业务?因为大部分业务的状态值都是从数据库中获取的,比如订单表的订单状态,商品表中商品的状态。可能的值是相同的。同一个业务的同一个属性对应的状态值的表达方式单一,不同业务下的属性状态可能有相同的值,但表达的含义不同。总体设计:简要说明:业务:比如有商品状态业务,订单状态业务...状态:订单待付款,待发货...事件:对应的状态只能到达事件集。比如pendingpayment状态下可达的事件只有:paymentevents和cancellationevents(取决于自己的业务)。执行事件主题:执行自定义事件函数。如果需要,还可以自定义事件前后的钩子,事件订阅者(比如支付事件发生后异步通知用户等)。使用手势首先自定义业务、状态和事件。自定义事件主题:注册到easyfsm:开始使用:完整的示例代码如下:Hook如果你想在事件处理函数前后执行一些hook,或者在事件执行后异步执行一些其他服务,easyfsm定义了这些两个接口。我们可以实现这两个接口:完整代码:总结以上简单介绍了easyfsm的设计和对应的使用姿势。https://github.com/wuqinqiang/easyfsm
