再要扯皮,就上Xstate

Xstate简介

Xstate是一个轻量级状态机工具,能在IDE里可视化创建状态机模型。根据大量的实际反馈,使用状态机能立竿见影的减少扯皮,非常有用:

Xstate同时支持IDEA和Eclipse,本文将以IDEA为例介绍该工具的安装和使用。

安装插件

在IDEA里面通过File->Settings->Plugins->Brows Repository打开插件仓库界面。 输入xross可以看到X-Series系列插件。选择Xross State Machine Editor进行安装,重启IDEA即可。

创建模型

通过File->New->Xross State Machine打开对话框,输入模型名称后将在resources目录创建文件。

创建状态机

一个状态机模型文件可以包含多个状态机。要创建状态机,在左侧工具栏点击State Machine按钮,再点击主窗口空白处。在下方的属性窗口为该状态机设置ID。

创建节点

状态节点一共有三种类型:开始状态,结束状态和普通状态。点击左侧工具栏的Start Node,End Node和State Node分别进行创建。将中间的普通状态ID设为"S1"。开始和结束节点不用设置。

创建事件

右键点击状态机空白处,选择Create New Event,在对话框中输入状态机能接收的事件名称"initialize"。同样再创建一个"shutdown"事件。

创建连线

状态之间的关联称为状态变迁。点击工具栏中Direct Route按钮,再依次点击相关节点来创建。其他两种Route是转角显示风格,功能上没区别,主要用于避免视觉上的重叠

关联事件

右键选择状态变迁后,在上下文菜单中选择触发变迁的事件。

最终效果如下。

调试模型

创建状态机模型的目的不只是为了沟通,而是要在应用中使用。按下面的方式引入状态机引擎依赖:

xml 复制代码
		<dependency>
			<groupId>com.xrosstools</groupId>
			<artifactId>xstate</artifactId>
			<version>1.1.1</version>
		</dependency>

xstate已经发布到Maven中央参考,可以随时下载。

调用代码

可以看到调用后的输出符合预期。

到此为止,除了最终的调用代码外,我们并不需要额外定义什么类型或定制什么逻辑。整个使用过程非常简单直接。

Xstate优点

用xstate画状态图比自己手撸代码快多了,状态图也非常方便沟通。其实对于稍微复杂一点的模型,用代码表示已经很困难了。比如下面的状态机节点数量仅比我们的例子多一个,但关联关系翻了2倍多。是如果用代码表示,可以想象编写和维护难度。

此外,模型文件可以和应用打包在一起,模型调用不依赖数据库或第三方服务,非常轻量级,维护起来相当容易。

参考资料

除了基本的状态处理外,Xstate有以下高级功能:

  1. 状态变迁触发器,在变迁时调用业务逻辑
  2. 变迁的条件检查,避免不满足特定条件
  3. 状态机子图引用,抽象公共状态机,简化整体模型
  4. 状态重置与恢复,将状态机实例置于指定状态,不用从头开始遍历,避免重复创建实例

有兴趣可以进一步了解样例代码

Xstate是开源低代码框架X-Series的一部分,其他两个是用于系统构建的xunit和决策判断的xdecision。

X-Series Github地址

大家有兴趣可以在评论区留言讨论。

相关推荐
hqxstudying5 分钟前
java依赖注入方法
java·spring·log4j·ioc·依赖
·云扬·13 分钟前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
martinzh1 小时前
Spring AI 项目介绍
后端
Bug退退退1231 小时前
RabbitMQ 高级特性之重试机制
java·分布式·spring·rabbitmq
小皮侠1 小时前
nginx的使用
java·运维·服务器·前端·git·nginx·github
前端付豪1 小时前
20、用 Python + API 打造终端天气预报工具(支持城市查询、天气图标、美化输出🧊
后端·python
爱学习的小学渣1 小时前
关系型数据库
后端
武子康1 小时前
大数据-33 HBase 整体架构 HMaster HRegion
大数据·后端·hbase
前端付豪1 小时前
19、用 Python + OpenAI 构建一个命令行 AI 问答助手
后端·python
凌览1 小时前
斩获 27k Star,一款开源的网站统计工具
前端·javascript·后端