状态机

简介: 首先需要考虑涉及到哪些状态节点和哪些事件,如何方便状态节点的获取、状态节点如何串联起来呢?串联的方式下,如何拿到下一个状态节点?如果基于角色,如何实现?我们知道工作流可以实现基于角色进行流程的流转,但是此时我们涉及到事件和状态,会出现多个分支,如果使用工作流实现,流程处理上,比如activiti上,可能比较复杂,因此考虑比较轻量级的状态机来实现的话,相对来说要方便一些。

     下面的内容基于https://github.com/alibaba/COLACOLA 是 Clean Object-Oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”。 目前COLA已经发展到COLA v4

一、如何实现一个状态机?

     首先需要考虑涉及到哪些状态节点和哪些事件,如何方便状态节点的获取、状态节点如何串联起来呢?串联的方式下,如何拿到下一个状态节点?如果基于角色,如何实现?

我们知道工作流可以实现基于角色进行流程的流转,但是此时我们涉及到事件和状态,会出现多个分支,如果使用工作流实现,流程处理上,比如activiti上,可能比较复杂,因此考虑比较轻量级的状态机来实现的话,相对来说要方便一些。

1)相关状态初始化,比如:STATE1, STATE2, STATE3, STATE4

2)相关事件:比如:EVENT1, EVENT2, EVENT3, EVENT4, INTERNAL_EVENT

3)状态节点上下文:context,主要包括状态节点类型、状态节点

构建状态节点分支相关接口信息:

From  从哪个状态节点开始

To  需要到的目标状态节点

When 定义过渡期间要执行的操作 perform

Condition  满足条件时,可以从from到to状态节点

因此可以想到我们需要构建状态机的构建器必然需要:

StateMachineBuilder 状态机构建器

数据结构:状态、事件

方便构建对应的transition

其中transition中包括的方法:

构建方法:build

指定初始状态  initialState

内部过渡: internalTransition

外部过渡:externalTransition

外部过渡列表:external Transitions

没有匹配策略:noMatchStrategy

StateMachineFactory 状态机工厂涉及的方法:

构建状态机

注册状态机

展示状态机

展示状态机uml

节点操作:

基于node的数据结构进行构建,配合使用from、to、condtion、link

with设置对应的布局

使用状态的步骤:

创建stateMachineBuilder对象

基于条件进行状态节点指向构建 initiaState、from、to、on、when、perform

基于状态机id进行构建 stateMachine

执行fireEvent操作,fire的过程中拿到下一个状态节点setNextState(source,request)

二、状态机信息流程

可以参考COLA里面的test,可以看到COLA的具体代码实现。

image-20221127123011098.png

三、展示状态机信息效果

image-20221127123206377.png

总体来说cola的状态机还是蛮实用的。

基于cola的状态机还可以实现复杂的状态-事件流转。如下图所示:

image-20221127124642866.png

四、状态机的使用场景

审批流程、订单状态流转等。


目录
相关文章
|
消息中间件 缓存 前端开发
COLA架构 入门
COLA架构 入门
4861 0
|
存储 缓存 监控
怎么更好地设计一个优秀的SaaS系统
设计一个优秀的SaaS系统,需要从架构、性能、安全性、租户隔离、扩展性等多方面进行深思熟虑。根据业务需求选择合适的多租户架构,保证数据隔离的同时提高系统性能。
1813 1
6、Mybatis-Plus wrapper的使用
这篇文章详细介绍了Mybatis-Plus中Wrapper的使用,包括QueryWrapper和UpdateWrapper的基本概念、组装查询、排序、删除、修改条件的方法,以及如何设置条件优先级、组装SELECT子句和实现子查询等高级用法。
|
11月前
|
Java 测试技术 编译器
@GrpcService使用注解在 Spring Boot 中开始使用 gRPC
本文介绍了如何在Spring Boot应用中集成gRPC框架,使用`@GrpcService`注解实现高效、可扩展的服务间通信。内容涵盖gRPC与Protocol Buffers的原理、环境配置、服务定义与实现、测试方法等,帮助开发者快速构建高性能的微服务系统。
1918 0
|
监控 架构师 NoSQL
spring 状态机 的使用 + 原理 + 源码学习 (图解+秒懂+史上最全)
spring 状态机 的使用 + 原理 + 源码学习 (图解+秒懂+史上最全)
|
算法 Java Sentinel
限流算法(计数器、滑动时间窗口、漏斗、令牌)原理以及代码实现
> 本文会对这4个限流算法进行详细说明,并输出实现限流算法的代码示例。 > 代码是按照自己的理解写的,很简单的实现了功能,还请大佬们多多交流找bug。
3185 0
|
传感器 数据可视化 JavaScript
状态机(State Machines):理解、设计和应用有限状态机
状态机(State Machines)是一种强大的计算模型和设计工具,用于建模和控制有限状态的系统和行为。无论是在软件开发、自动化控制、游戏设计还是其他领域,状态机都发挥着关键作用。本博客将深入探讨状态机的概念、工作原理以及如何在不同应用中设计和应用它们。
11148 78
|
Java 测试技术
idea for mac 最全快捷键整理
idea for mac 最全快捷键整理
4476 12
|
Java 测试技术 开发者
COLA-statemachine事务失效踩坑
cola-statemachine是阿里开源项目COLA中的轻量级状态机组件。最大的特点是无状态、采用纯Java实现,用Fluent Interface(连贯接口)定义状态和事件,可用于管理状态转换场景。比如:订单状态、支付状态等简单有限状态场景。在实际使用的过程中笔者曾发现状态机内事务不生效的问题,经过排查得到解决,以此记录一下
2721 1
|
XML 前端开发 Java
SpringBoot参数校验@Validated、@Valid(javax.validation)详解
SpringBoot参数校验@Validated、@Valid(javax.validation)
3800 4