如何在Sequence Diagrams中多次调用完整内部流程实现重试循环
带全流程跳转重试逻辑的序列图建模方案
针对需要从流程起点(Action1)重新执行全链路步骤、直至Action2校验通过的重试场景,不要使用孤立的ref块表达跳转,以下方案可以完全消除表意歧义:
方案1:使用标准loop组合片段(优先推荐,符合UML官方语义)
这是团队协作场景下沟通成本最低的画法,完全不会出现“仅重跑Action1”的误解:
- 把「执行Action1 → 执行Action2 → 校验Action2执行结果」整段逻辑,完整包裹在
loop组合片段的边界内 - 在loop片段的守卫条件位置明确标注循环规则:重复执行片段内所有步骤,直至Action2校验通过
- 逻辑语义:只要Action2校验失败,片段边界内从第一步Action1开始的所有步骤会自动重新执行,校验通过后才会跳出循环执行后续流程
常用的PlantUML实现示例如下:
@startuml actor 流程触发方 participant 业务执行单元 loop 重复执行:直至Action2执行成功 流程触发方 -> 业务执行单元: 执行Action1 业务执行单元 --> 流程触发方: Action1执行完成 流程触发方 -> 业务执行单元: 执行Action2 业务执行单元 --> 流程触发方: 返回Action2执行结果 流程触发方 -> 流程触发方: 校验Action2结果 end @enduml
方案2:ref块复用场景的歧义消除写法
如果因为流程步骤过长、需要用ref块做逻辑复用避免重复绘图,不要只在ref块内写“重跑Action1”,要做两个明确标注:
- 在流程起始位置的Action1旁增加明确锚点标记:
[流程重试起点] - ref块内标注完整跳转语义,不要省略后续关联步骤:跳转至[流程重试起点],重新执行从Action1到结果校验的全量步骤
避坑提醒
不要直接画一条从校验失败分支指向Action1的无标注回线箭头,这种画法没有明确的流程边界,非常容易被误读为“校验失败后仅单独调用Action1,不会触发后续Action2执行”。
按照UML2.0序列图规范,
loop是表达循环、重试逻辑的原生标准元素,语义共识度远高于自定义ref跳转,跨团队协作场景下优先选择该方案。
内容的提问来源于stack exchange,提问作者Ishan Saini
相关产品推荐
相关产品推荐

