再要扯皮,就上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地址

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

相关推荐
程序边界1 小时前
用了三年数据同步软件,我想好好聊聊KFS这套东西到底强在哪(上)
后端
sp421 小时前
简单的 Spring 文件上传与下载组件
后端
企智汇-项目管理软件1 小时前
离散制造管理系统怎么选?一套系统管住从研发到交付的全周期
java·人工智能·制造·项目经理·项目管理软件·项目管理系统·项目管理软件工程
量化分析码农1 小时前
【Python量化实盘工程 #04】回测收益虚高30%?滑点与冲击成本建模让模拟更真实
后端
QuantiCore_IO1 小时前
量化回测复权数据的工程实践:从 API 获取到数据质量验证
后端·github·api
程序边界1 小时前
数据同步软件下半场:断了丢不丢、错了能不能修(下)
后端
wei_shuo1 小时前
KFS数据同步软件实战:异构数据同步、实时复制与产品力解析
后端
极派科技1 小时前
凌晨收到告警:MySQL CPU 100%,几千台 IoT 设备同时上报把系统打崩了
后端
王中阳Go1 小时前
做了 8 年前端,简历改漂亮后面一个挂一个:差的不是前端,是这 3 块底子
人工智能·后端·面试
SimonKing1 小时前
数据不出本机!本地全文检索+知识图谱,可以试试这个开源项目:KnowSeek
后端·程序员