序列图:背景循环

3

我正在处理一个系统(B),该系统与另一个系统(C)通信,并在终端(A)上展示不断循环计算的值。 (A)要求(B)报告一个变量x。 (B)无阻塞回复,以使(B)能够继续处理(C)。后来,(A)还要求(B)报告变量y,以同样的方式提供服务。

为了文档化,我需要创建一个UML序列图(使用plantuml)来描述这个过程。我现在的问题是如何正确地建模。即使循环没有完成,(B)和(C)之间的通信也可以继续进行。但是我该如何正确地建模呢?

以下是选项1,仅使用循环中的异步回复:

@startuml
A ->> B: report x
loop
    B -->> A: x
end loop
B -> C: foo
C --> B: bar
A ->> B: report y
loop
    B -->> A: y
end loop
B -> C: qux
C --> B: baz
@enduml

enter image description here

选项2适用于在流程后期变为真的条件:

@startuml
A ->> B: report x
loop until reporting x ends
    B -->> A: x
end loop
B -> C: foo
C --> B: bar
A ->> B: report y
loop until reporting y ends
    B -->> A: y
end loop
B -> C: qux
C --> B: baz
B -->> A: end reporting x
B -->> A: end reporting y
@enduml

在此输入图片描述

选项 2 更加明确。但是这两个选项中的任何一个是否正确地表示了手头的过程呢?

1个回答

2
他们两个可能都是正确的。SD显示了一个过程的具体视图。由于时间是线性的(在这里忘记那些量子跃迁),你没有真正的并行过程,你将有一个对象在单个时间发送或接收消息,没有并行。由你来决定要表示哪个序列。可能需要多个序列才能给出半个清晰的图片。
要显示真正的并行过程,您需要两个时间轴(例如,如果您有两个并行处理器和两个相同进程的分叉并行运行)。如果需要,您可以添加时间约束,并显示某些事情(几乎)并行。
我想添加一个状态图是个好主意,它显示了如何支持转换以及谁必须等待什么时候和多长时间。

高层视图是合适的。负责人对上下文切换等事项不感兴趣。我只想确保对于变量x和y的报告被构想为一个不以"foo-bar"和"qux-baz"的调用/响应结束的持续过程。 - undefined
请三思。在单线程中执行的非阻塞操作将导致轮询。否则,如果使用中断,您将有第二个线程。这是一个设计问题。仅在SD中进行一些“抽象绘图”将没有任何好处。如果利益相关者不感兴趣,请使用AD将其保持在业务层面上。 - undefined
实现将使用一个线程。我只是想知道是否需要以不同的方式对其进行建模,或者我所建模的循环是否会被理解为我所期望的:循环将一直持续到结束(选项#1),或者直到(B)显式停止循环(选项#2)。 - undefined
嗯,你可以简单地添加一条注释来明确你的意图。只要清楚地表明该图表在技术上“不正确”即可。然而,我会使用活动和/或状态图表代替。如果你只有一把锤子,每个问题都是钉子。如果你有一个工具箱,你会发现事情更加聪明高效。 - undefined
一个<<ref>>片段会有同样的缺点,对吗?所以我猜我不能在单个页面上技术上正确地表达它。因此,我考虑使用注释,并且如果需要的话,在一个单独的线程中描述x和y的报告的第二个图表。 - undefined
1
是的,那样做是可行的。不过,你不应该把这个变成一种常态习惯,哈哈 ;-) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接