UML 片段以防止进一步执行?

UML fragment to prevent the further executions?

UML 片段在表示检查操作的情况下使用什么,该检查操作要么停止对失败检查的进一步执行,要么放手,一种编程语句 if role != 'admin': break:

我发现 assert 片段似乎适合这种情况。

图表上的想法:

是否正确使用片段来表示操作 change_sensetive_settings() 仅在用户具有 admin 角色时执行?

我不是 assert 的忠实拥护者,它似乎是用于可视化过程编程而不是有效行为的干净设计。标准中assert片段的资料不多:

The interactionOperator assert designates that the CombinedFragment represents an assertion. The sequences of the operand of the assertion are the only valid continuations. All other continuations result in an invalid trace.

但是这里使用 assert 的方式,在这方面似乎令人困惑:你只是在服务器生命线上显示一个约束 { user.role == 'admin },而继续将导致在客户端。

为了消除此图的歧义,我建议在 assert 片段中包含由 register_user() 消息组成的序列,然后是 return 消息和您的约束。这将清楚地将有关用户角色约束的结果与注册联系起来。

但这只是故事的一部分。因为,“所有其他延续导致无效跟踪”在实践中意味着什么?断言,只是告诉一个假设。在这种互动之前是否有任何东西可以使这个假设变得现实?如果不是,如果用户没有足够的授权会发生什么?

出于所有这些原因,我宁愿建议使用此处和 alt 来显示正常流程,但也建议如果用户没有正确的授权,应该发生一些事情(以及哪一方:客户端或服务器)。

不对,我认为assert没有正确使用。原因如下:

规范定义:

The interactionOperator assert designates that the CombinedFragment represents an assertion. The sequences of the operand of the assertion are the only valid continuations. All other continuations result in an invalid trace.

也就是说,状态不变量{user.role='admin'}是回复register_user()消息后唯一有效的延续。这将排除其他结果。我不认为,这就是你的想法。

因此,只需删除 assert 片段即可。由于序列图仅显示了一种可能的 场景,并不意味着其他场景无效。你可以有另一个序列图,其中状态不变量是 {user.role='student'}.

如果您想在一张图中显示更多场景,可以使用 alt 片段。然而,正如其他人指出的那样,序列图的目的不是可视化编程。因此,力求完整描述所有可能的场景是不合适的。

小错误

图中有些小错误。其中大部分已被其他人指出,但要使其成为一个完整的答案:

  • 第一条消息可能是找到的消息。然后圆圈将被填满,消息的名称将显示在箭头上。它也可能来自门。这将通过源自框架的箭头来显示。我会推荐后者。
  • 状态不变量可能应该低于 change_sensitive_settings 的接收,因为用户仍然可以尝试更改它们。只有服务器可以决定拒绝这个请求。或者它必须移动到客户端生命线,如果你想指定客户端只发送消息,如果s/he是管理员。
  • 图表末尾的箭头应该是虚线,因为它是对它开头的同步消息的回复。同样,它应该以表示丢失消息的黑色圆圈结束,或者更好的是,在图表的框架处结束。