spring statemachine

Spring StateMachine-项目中使用状态机(二)-

2018-04-06  本文已影响16人  AlanKim

抱歉,最近懒癌发作,好久没写了,今天续上
这节先列举下状态机中一些核心的概念,方便后续理解:

状态机定义-相关概念

先从状态机的定义入手,StateMachine<States, Events>,其中:

状态机-相关概念

举个简单的例子:

   builder.configureTransitions()  -- 配置节点
            .withExternal()   //表示source target两种状态不同
            .source(CREATE)  //当前节点状态
            .target(WYD_INITIAL_JUMP)  //目标节点状态,这里是设置了个中间状态
            .event(BizOrderStatusChangeEventEnum.EVT_CREATE)  //导致当前变化的动作/事件
            .action(orderCreateAction, errorHandlerAction) //执行当前状态变更导致的业务逻辑处理,以及出异常时的处理

补充说明:

目前我主要使用的就是这三种,当然如果有更复杂的情况,还有withLocal\withJunction等各种写法,但是:当你对一项技术并不是那么了解时,先尽可能的用简单的实现来处理你的业务,出现问题的可能性最小,后续可以再慢慢扩展。

注意:

稍微复杂的节点配置

接上面的withExternal,下面是使用choice做了一个分支选择,代码如下:

            .and()  // 使用and串联
            .withChoice() // 使用choice来做选择
            .source(WYD_INITIAL_JUMP) // 当前状态
            .first(WAIT_REAL_NAME_AUTH, needNameAuthGurad(), needNameAuthAction)  // 第一个分支
            .last(WAIT_BORROW, waitBorrowAction) // 第二个分支

说明:

好啦,基本上项目中用到的核心概念就先到这里,下一节会讲下状态机引擎的持久化处理。

上一篇 下一篇

猜你喜欢

热点阅读