news 2026/3/28 17:59:50

活动图用于工作流的状态机和业务对象状态机

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
活动图用于工作流的状态机和业务对象状态机

核心区别:

维度系统级工作流状态机业务对象状态机
建模对象一个业务流程工作流实例一个业务实体(如Order、Payment)的实例
状态定义流程的阶段活动(如“正在验证”、“正在执行”)实体的业务状态(如“待支付”、“已发货”)
关注焦点控制与协调:哪个活动该在何时执行,流程如何推进数据与规则:实体在业务规则下允许如何变化
转换触发子活动完成外部事件业务对象状态达到某条件触发具体业务操作(如pay()ship())触发
生命周期相对较短,与单个流程实例的执行时间一致相对较长,与实体的业务存在时间一致(如订单从创建到完成可能数天)

具体例子说明

以一个简化的“在线订单履约”流程为例:

1. 系统级工作流状态机(用于调度)

  • 状态(阶段)

    • OrderReceived:订单已接收,初始阶段。

    • PaymentVerification:支付验证阶段。

    • InventoryReservation:库存预留阶段。

    • ShippingArrangement:物流安排阶段。

    • ProcessCompleted:流程完成。

  • 转换触发

    • OrderReceivedPaymentVerification:当订单对象被创建后自动触发。

    • PaymentVerificationInventoryReservation:当支付对象的状态变为Confirmed(已确认)时触发。

    • InventoryReservationShippingArrangement:当库存对象的状态变为Reserved(已预留)时触发。

  • 关注角度“接下来应该做什么?”。它不关心订单本身是“待支付”还是“已支付”,它只关心支付验证这个活动是否已经完成,从而决定流程是否进入库存预留阶段。

2. 业务对象状态机(以Order对象为例)

  • 状态

    • Draft:草稿。

    • PendingPayment:待支付。

    • Paid:已支付。

    • Shipped:已发货。

    • Delivered:已送达。

    • Cancelled:已取消。

  • 转换触发

    • PendingPaymentPaid:由pay()操作触发。

    • PaidShipped:由ship()操作触发。

  • 关注角度“这个订单当前能做什么?”。它定义了业务规则:订单必须在Paid状态下才能执行ship()操作。它不关心发货这个动作是系统自动触发还是人工触发。

二者如何协同工作?

在上例中,系统级工作流状态机是导演,业务对象状态机是演员。

  1. 工作流处于PaymentVerification阶段。这个阶段的活动会调用支付网关,最终将支付对象的状态改为Confirmed

  2. 支付对象状态变为Confirmed这个条件,触发了工作流状态机从PaymentVerification转换到InventoryReservation

  3. 工作流进入InventoryReservation阶段,该阶段的活动尝试预留库存。若成功,则将库存对象的状态改为Reserved

  4. 库存对象状态变为Reserved,触发了工作流状态机转换到ShippingArrangement阶段。此阶段的活动会调用ship()操作,从而将订单对象的状态从Paid变为Shipped

结论

系统级工作流状态机关注的是过程的进度和协调,其状态是宏观的活动阶段,转换依赖于阶段成果(常体现为其他对象的状态变化)。

业务对象状态机关注的是单个实体的合法演变,其状态是微观的业务状态,转换由具体的业务操作触发。

二者通过事件和条件紧密耦合:业务对象的状态变化作为事件,驱动工作流状态机的阶段转换;而工作流状态机的阶段活动,又是触发业务对象状态改变的主要执行者。理解这种区别与联系,对于设计清晰、可维护的复杂系统至关重要。

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

智能客服升级:快速集成物体识别能力的全渠道客服系统

智能客服升级:快速集成物体识别能力的全渠道客服系统 为什么需要为客服系统添加图片识别能力? 想象一下这样的场景:一位顾客在电商平台购买了一件家具,但不知道如何组装。他拍下零件照片发给客服,传统客服只能回复“请…

作者头像 李华
网站建设 2026/3/27 12:39:59

万物识别模型解释:基于Jupyter的交互式学习环境

万物识别模型解释:基于Jupyter的交互式学习环境 对于机器学习初学者来说,理解万物识别模型的工作原理是一个令人兴奋但又充满挑战的过程。传统方式需要手动搭建Python环境、安装CUDA驱动、配置Jupyter Notebook等一系列复杂操作,这让很多新手…

作者头像 李华
网站建设 2026/3/26 22:04:54

JLink驱动开发入门必看:从零搭建调试环境

JLink调试实战指南:从零搭建高效嵌入式开发环境 你有没有遇到过这样的场景? MCU上电后毫无反应,串口没输出、LED不闪烁,连“死循环”都进不去。这时候靠 printf 调试已经无能为力——你需要一个真正深入芯片内部的工具。 这就…

作者头像 李华
网站建设 2026/3/26 22:04:53

ms-swift与VSCode集成而非PyCharm激活码的真正价值

ms-swift 与 VSCode:重塑大模型工程化开发的新范式 在今天,一个算法工程师花一整天时间调试环境、配置依赖、修改训练脚本却没能跑通一次有效实验,早已不是什么稀奇事。尤其是在大模型研发场景下,从下载权重到微调部署&#xff0c…

作者头像 李华
网站建设 2026/3/26 22:04:55

量化配置向导:选择合适的比特数与算法实现最优平衡

量化配置向导:选择合适的比特数与算法实现最优平衡 在大模型落地日益加速的今天,一个现实问题摆在每一位工程师面前:如何让拥有数十亿参数的庞然大物,在有限显存和算力资源下依然高效运行?FP16精度下的Qwen3-7B模型光权…

作者头像 李华
网站建设 2026/3/26 22:04:52

告别环境配置:云端GPU+预置镜像实现万物识别

告别环境配置:云端GPU预置镜像实现万物识别 作为一名独立开发者,我最近在为智能相册应用添加物品识别功能时遇到了难题:本地电脑性能不足,又不想花费大量时间配置复杂的深度学习环境。经过实践,我发现使用云端GPU配合预…

作者头像 李华