de_DEen_USes_ESfa_IRfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

UML 顺序图:可视化时间和交互

UML 顺序图是理解系统动态行为的重要工具。它描述了对象之间的交互方式以及这些交互发生的顺序,强调消息的时间顺序流动。它对于定义用例、记录API调用以及追踪复杂交易流程至关重要。

本教程将引导您了解顺序图的基本元素和建模技术。

核心结构与目的

顺序图沿两个轴进行组织:

  1. 水平轴:显示参与的对象(或参与者、类和组件)。
  2. 垂直轴(时间轴):表示时间的流动,方向向下。在图中位置较低的消息在序列中发生得更晚。

Axis-of-sequence-diagram

其目的是回答以下问题:“在这个特定场景(用例)中,这些对象以何种顺序交换信息以实现预期结果?”

顺序图的基本元素

要建模一个序列,需要三个核心元素:生命线、消息和激活条。

A. 生命线(参与者)

生命线表示交互中的单个参与者——对象、实例或类。

  • 符号表示:图的顶部有一个矩形框,包含对象名称,下方延伸出一条垂直虚线。
  • 语法:
    • 参与者名称(如果对象是实例,例如用户)
    • 实例名称:类名(例如authService: AuthenticationService)
  • 目的: 虚线表示参与者在序列范围内的随时间存在的状态。

lifeline

B. 消息(交互)

消息是画在生命线之间的水平箭头。它们表示对象之间的通信,例如方法调用、信号或API请求。

Messages-(Interaction)

消息类型:

消息类型 符号表示 描述
同步调用 实线配实心箭头 发送方在继续之前等待响应。这会在接收方的生命线上启动一个激活条激活条。
回复/返回 虚线配空心箭头 对同步调用的响应,表示控制权返回发送方。这通常会关闭激活条。
异步消息 实线配空心箭头 发送方不等待响应,立即继续自身的执行。常见于事件驱动架构中。
自调用 箭头返回到同一生命线 对象调用自身的一个方法。
发现消息 从端点出发并击中生命线的箭头 消息的发送方未知或超出图示范围(例如,外部触发)。

C. 激活条(执行规范)

激活条(也称为控制焦点)是画在生命线顶部的细长垂直矩形。

  • 符号表示: 生命线上的实心垂直矩形。
  • 目的: 它表示对象正在执行操作(即其方法正在运行)或等待同步返回的期间。它从接收到同步消息时开始,到发送回复消息时结束。

建模逻辑与控制流

为了建模复杂的业务逻辑,您使用片段(或框)来包围图表的各个部分。

A. 组合片段

组合片段允许您建模条件逻辑、重复和可选步骤。最常见的片段包括:

  1. 替代(alt): 用于 if-else 逻辑。片段由虚线划分,每个部分包含一个条件(“保护条件”),用方括号括起来。只能选择一条路径。
    • 示例: [如果用户凭据有效][否则 / 凭据无效].
  2. 可选(opt): 用于一个 if 语句。片段内的交互是可选的,仅当条件(保护条件)为真时才执行。
    • 示例: [如果用户购物车中有商品].
  3. 循环(loop): 用于重复。保护条件指定迭代的条件(例如,[对每个项目][当(重试次数 < 3)]).
  4. 引用(ref): 通过引用另一个独立的顺序图中定义的交互序列来实现图表的模块化。这可以防止图表变得过于杂乱。
  5. 关键(crit): 用于表示一个不能被中断的段落,常用于建模并发过程。

逐步建模示例

让我们建模一个简化的用户结账流程 使用核心元素:

步骤 操作 消息类型
1. 用户点击“结账”。 同步调用
2. 前端验证购物车。 自调用(在前端)
3. 前端请求支付处理。 同步调用
4. 支付网关检查资金。 同步调用
5. 支付网关返回“成功”。 返回消息
6. 前端向库存服务发送异步消息以减少库存。 异步消息
7. 前端向订单服务发送同步消息以完成订单。 同步调用
8. 订单服务返回“订单ID”。 返回消息
9. 前端显示确认页面。 返回消息(给用户)

建模逻辑(替代片段)

为了处理失败,我们使用一个替代片段:

  1. 支付网关检查(步骤4和5)放入一个alt片段。
  2. 第一部分由[成功]。此部分包含步骤6、7、8和9。
  3. 第二部分由虚线分隔,由[失败]。此部分包含一条新的同步消息:paymentService -> 前端:返回“支付失败”并且前端显示错误页面。

序列图最佳实践总结

  • 保持聚焦:单个序列图通常应仅描述一个用例或一个单一的原子操作(例如,“登录”、“将商品添加到购物车”)。对于子流程,请使用引用片段来表示子流程。
  • 清晰地标记消息:使用动词短语表示消息,反映方法名称或API端点(例如,processPayment(金额, 令牌)).
  • 正确识别参与者: 区分 参与者(外部实体)和 对象(内部系统组件或实例)。
  • 时间流向向下: 确保消息从上到下保持一致的顺序。
  • 使用片段进行控制: 避免在消息流内部绘制复杂的决策节点或循环;使用 alt, opt,以及 loop片段。

要了解有关UML及其AI驱动的可视化方法的更多详情,请访问我们的 UML资源中心.