news 2026/7/4 13:07:16

各种类型状态机

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
各种类型状态机

状态机的建立不一定要针对某个具体的业务对象。它取决于设计目的和应用场景,可以从多个层面来建立状态机。

1.传统的业务对象状态机

最常见的情况是针对具体业务对象:

python

class Order: state: OrderState # PENDING → PAID → SHIPPED → DELIVERED

2.非业务对象的应用场景

a. 流程/工作流状态机

  • 审批流程:SUBMITTED → REVIEWING → APPROVED/REJECTED

  • 部署流程:BUILD → TEST → DEPLOY → VERIFY

b. UI/交互状态机

javascript

// 组件交互状态 const UIState = { IDLE: 'idle', LOADING: 'loading', SUCCESS: 'success', ERROR: 'error' }

c. 协议/通信状态机

  • TCP连接:CLOSED → LISTEN → ESTABLISHED → CLOSE_WAIT

  • 认证流程:UNAUTHENTICATED → AUTHENTICATING → AUTHENTICATED

d. 算法/计算状态机

  • 解析器状态:READING → PARSING → VALIDATING → COMPLETE

  • 游戏AI状态:PATROL → CHASE → ATTACK → RETREAT

3.抽象层次的状态机

a. 子系统状态机

python

class PaymentSubsystem: state: SystemState # INITIALIZING → READY → PROCESSING → DEGRADED

b. 会话/上下文状态机

  • 用户会话:NEW → ACTIVE → IDLE → TERMINATED

  • 事务上下文:BEGIN → IN_PROGRESS → COMMITTING → DONE

4.何时不需要绑定业务对象

适合使用非业务对象状态机的场景:

  1. 控制流程导向:当主要关注流程控制而非数据状态时

  2. 跨对象协调:多个对象需要协同完成某个流程

  3. 临时状态管理:状态生命周期短暂,不适合绑定持久化对象

  4. 基础设施层:技术层面的状态转换

实际案例:

typescript

// 文件上传管理器(不是针对某个业务对象) enum UploadSessionState { INITIALIZING = 'initializing', UPLOADING = 'uploading', PROCESSING = 'processing', COMPLETED = 'completed', FAILED = 'failed' }

5.设计考虑

优点(不绑定业务对象):

  • 更灵活:可以管理跨领域的状态流转

  • 更专注:只关心状态逻辑,不耦合业务数据

  • 更可复用:通用状态机可以在多个上下文中使用

需要考虑的问题:

  1. 状态持久化:如何保存和恢复状态?

  2. 状态归属:谁拥有这个状态机?

  3. 事件溯源:状态变更如何与业务事件关联?

6.建议

  1. 按需设计

    • 如果状态主要是业务数据的属性→ 绑定业务对象

    • 如果状态主要是流程的控制逻辑→ 可以考虑独立状态机

  2. 混合使用

python

class OrderService: # 业务对象状态机 order_state: OrderState # 服务处理状态机(独立) processing_state: ServiceState # IDLE → PROCESSING → WAITING → COMPLETE

总结:状态机的建立取决于你管理的是什么类型的状态转换。业务对象状态机是最常见的,但在流程控制、系统协调、UI交互等场景中,建立独立的状态机往往是更清晰的设计选择。关键是识别出状态的本质——是数据的属性,还是流程的控制点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 18:40:13

对比实测:lora-scripts vs 手动训练LoRA,效率提升超80%

对比实测:lora-scripts vs 手动训练LoRA,效率提升超80% 在生成式AI快速渗透内容创作与垂直应用的今天,越来越多团队希望通过微调大模型实现个性化输出。然而,一个现实问题摆在面前:即便是像LoRA这样“轻量级”的微调方…

作者头像 李华
网站建设 2026/7/2 2:28:37

手机发送指令控制LED点阵:从零实现项目

手机控制LED点阵:从零搭建一个可远程更新的显示系统你有没有想过,只用一部手机和一块百元以内的开发板,就能做出一个可以随时更改内容的LED广告牌?不是烧录程序,也不是插SD卡——而是像发消息一样,点一下屏…

作者头像 李华
网站建设 2026/6/30 16:28:22

学霸同款9个AI论文写作软件,专科生毕业论文轻松搞定!

学霸同款9个AI论文写作软件,专科生毕业论文轻松搞定! AI 工具让论文写作不再难 对于专科生来说,撰写毕业论文是人生中一次重要的挑战。面对繁重的写作任务、复杂的格式要求以及时间紧迫的压力,许多同学感到无从下手。而随着 AI 技…

作者头像 李华
网站建设 2026/7/1 0:33:30

lora-scripts数据预处理技巧:高质量图片收集与prompt精准描述方法论

LoRA训练中的数据预处理艺术:从图片筛选到Prompt工程的实战指南 在AI生成内容(AIGC)日益普及的今天,个性化图像生成已不再是实验室里的高深课题。越来越多的内容创作者、独立开发者甚至设计师开始尝试定制自己的Stable Diffusion模…

作者头像 李华
网站建设 2026/7/3 15:53:27

PyQt商业开发授权指南:5个关键问题与解决方案

PyQt商业开发授权指南:5个关键问题与解决方案 【免费下载链接】PyQt 项目地址: https://gitcode.com/gh_mirrors/pyq/PyQt 在当今数字化时代,PyQt作为Python生态中最强大的GUI框架之一,为企业级应用开发提供了丰富的功能组件和灵活的…

作者头像 李华