前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >状态机

状态机

作者头像
路行的亚洲
发布2023-02-28 13:29:26
1.1K0
发布2023-02-28 13:29:26
举报
文章被收录于专栏:后端技术学习

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

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

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

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

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

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

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

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

代码语言:javascript
复制
From  从哪个状态节点开始
To  需要到的目标状态节点
When 定义过渡期间要执行的操作 perform
Condition  满足条件时,可以从from到to状态节点

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

代码语言:javascript
复制
StateMachineBuilder 状态机构建器
数据结构:状态、事件
方便构建对应的transition

其中transition中包括的方法:

代码语言:javascript
复制
构建方法:build
指定初始状态  initialState
内部过渡:internalTransition
外部过渡:externalTransition
外部过渡列表:external Transitions
没有匹配策略:noMatchStrategy

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

代码语言:javascript
复制
构建状态机
注册状态机
展示状态机
展示状态机uml

节点操作:

代码语言:javascript
复制
基于node的数据结构进行构建,配合使用from、to、condtion、link
with设置对应的布局

使用状态的步骤:

代码语言:javascript
复制
创建stateMachineBuilder对象
基于条件进行状态节点指向构建 initiaState、from、to、on、when、perform
基于状态机id进行构建 stateMachine
执行fireEvent操作,fire的过程中拿到下一个状态节点setNextState(source,request)

二、状态机信息流程

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

三、展示状态机信息效果

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

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

四、状态机的使用场景

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端技术学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、如何实现一个状态机?
  • 二、状态机信息流程
  • 三、展示状态机信息效果
  • 四、状态机的使用场景
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档