基本概念与接口
1、状态机
Solon 状态机(不需要持久化,通过上下文传递),作为 solon-flow 的互补。 主要用于管理和优化应用程序中的状态转换逻辑,通过定义状态、事件和转换规则,使代码更清晰、可维护。其核心作用包括:简化状态管理、提升代码可维护性、增强业务灵活性等。
核心概念包括:
- 状态(State):代表系统中的某种状态,例如 "已下单"、"已支付"、"已发货" 等。
- 事件(Event):触发状态转换的事件,例如 "下单"、"支付"、"发货" 等。
- 动作(Action):在状态转换发生时执行的操作或行为。
- 转换(Transition):定义状态之间的转换规则,即在某个事件发生时,系统从一个状态转换到另一个状态的规则
2、主要接口
| 接口 | 说明 |
|---|---|
| Event | 事件接口 |
| EventContext | 事件上下文接口 |
| EventContextDefault | 事件上下文接口默认实现 |
| State | 状态接口 |
| StateMachine | 状态机(不需要持久化,通过上下文传递) |
| StateTransition | 状态转换器 |
| StateTransitionContext | 状态转换上下文 |
| StateTransitionDecl | 状态转换说明(声明) |
3、StateTransitionDecl 状态转换(DSL)说明
主要方法说明:
| 方法 | 要求 | 说明 |
|---|---|---|
| from | 必须 | 转换的源状态(可以有多个) |
| to | 必须 | 转换的目标状态(一个) |
| on | 必须 | 触发事件(当事件发生时,触发转换) |
| when | 可选 | 额外条件 |
| then | 可选 | 然后执行动作 |
转换声明示例:
//t.from(oldState).to(newState).on(event).when(?).then(...) //when, then 为可选
addTransition(t ->
t.from(OrderState.NONE).to(OrderState.CREATED).on(OrderEvent.CREATE).then(ctx -> {
Order payload = ctx.getPayload();
payload.setStatus("已创建");
payload.setState(OrderState.CREATED);
System.out.println(payload);
}));