uml - 活动图 - 在这种情况下,关于分叉/加入和决策/合并的混淆
问题描述
我正在创建一个活动图
- 管理员登录网络
- 如果经过验证,它将到达仪表板
- 通过仪表板可以管理帐户、管理产品和管理问题
- 执行上述选项之一后,它可以返回仪表板或从系统注销。
我使用了 fork/join,它是否正确或者我应该第二次使用决策/合并,是否正确定义了注销或执行仪表板中可用的另一个选项的过程?
解决方案
您的活动有几个问题。
首先也是最严重的,它不会做任何事情,因为动作(主要是那些 - 不是活动中的所有模型元素)对传入的控制流具有“隐式和语义学”。这意味着只有在对所有传入的控制流操作提供令牌时才执行操作,否则它会等待。因此,由于在执行并完成登录之前,来自验证的控制流无法提供令牌,因此您有一个锁定。并且没有执行任何操作。这同样适用于仪表板。要解决此问题,您需要对合并节点进行建模。
第二点是您只想执行(根据您的描述)其中一个管理操作。(顺便说一句,带有通用动词的名称,如“管理”、“维护”、“执行”、“执行”等,对于动作来说是非常糟糕的名称,请改用更具体的名称)。无论仪表板操作中的选择如何,您的模型都会同时执行所有操作。并发意味着以任意顺序并且不需要并行执行。因此,您应该将分叉替换为决策节点,其中输出流的条件基于仪表板中的选择。决策节点可以具有任意(但有限)数量的传出控制流。来自管理操作的所有传出控制流都使用合并节点而不是连接节点进行合并。
使用 UML/SysML 工具时可以解决的一个小问题是,fork 和 join 节点是条形而不是矩形框架。
推荐阅读
- linux-kernel - 如何在 qemu 上启动 sabrelite linux 映像
- c++ - 从模板参数指向方法的指针
- javascript - foreach 循环中的下拉菜单
- asp.net-mvc - 在 ExchangeService 中出现此错误通常只允许每个套接字地址(协议/网络地址/端口)使用一次 XX.XXX.XXX.XXX:443
- javascript - 通过 Javascript 在 Qml 中更改时,字符串的结尾被截断
- android - 如何通过我的 Android 应用设置设备时间
- django - 如何根据 django 中的 pk 使用一个值预先填充文本字段
- android - Jetpack workmanager 不返回成功
- laravel - 调用未定义的方法“连接”
- java - Springboot中的@Value返回null