【问题标题】:How to connect two Actions directly in PlantUML?如何在 PlantUML 中直接连接两个 Action?
【发布时间】:2021-11-19 17:45:56
【问题描述】:

我正在尝试在 PlantUML 中创建图表,但无法将两个动作连接起来。

源代码如下所示:

@startuml
skinparam rectangleBorderThickness 1
|#orange|Registrar|
#lightgray:**Introduce document to the system**;
:Register Document;
if (Work on the document is required?) then (Yes)
repeat
:Work on incoming documents;
|#green|Performer|
:**Perform tasks for the document**;
repeat while (Completed?) is (No) not (Yes)
|#orange|Registrar|
else
#lightgray:**Archive document**;
end
@enduml

这就是我所拥有的:

图表显示文档生命周期。 动作1是最后阶段,这是结束,由橙色人执行。 动作 2 由绿人执行。可以做也可以不做,是条件3。

我想说的是,如果满足(完成)条件 3,则文档进入其最后阶段,即 1,它将完成循环。我可以这样做吗?

我认为我可以删除条件 3 并将操作 2 转换为条件,但我仍然无法链接回 2 和 1,这是我的主要问题。

【问题讨论】:

    标签: uml plantuml activity-diagram


    【解决方案1】:

    基本上你可以做到。一个决策是一个 ActivityNode 并且可以行为。通常,Decision 的行为是有限的。所以在你的情况下,我猜它会是“文件闻起来很好;很好”或“闻起来很糟糕;再做一次”。但是,这不会使图表更清晰或更易于阅读。我会保持原样。

    编辑从你的 cmets 我想出了这个图表:

    我缩写了一点,但基本上这就是它的样子。合并是强制性的,否则模型将无效。另请注意,守卫放在方括号中,这是强制使它们成为守卫而不是一些(无意义的)标签。

    请注意,PlantUML 正在创建错误的决策节点,因为它们只能根据 UML 规范为菱形。他们将它们渲染为六边形,以便为内部标签腾出位置。虽然不是正确的 UML,但它可能是任何人都可以理解的。

    【讨论】:

    • 首先:您应该避免在基于答案的某种编辑循环中从根本上改变您的问题。相反,打开一个新问题。此外,我认为您的问题没有明确描述。我想Perform tasks.. 获得积极回报后,您想继续使用Archive?。
    • 以后我会听取你的建议。至于第二部分。你猜对了,这正是我在“我想要的是,如果条件 3 满足(完成),则文档进入其最后阶段,即 1,它将完成循环。”。跨度>
    • 我是 platuml 的新手,所以如果我没有在图表方面说得足够清楚,我深表歉意。
    • 我添加了一个草图,它的外观。但是,不能给你一个 PlantUML 版本。
    【解决方案2】:

    NB这是 OP 上一个问题的答案,他想要从 Perform tasks...Archive document 的直接控制流

    我不知道 PlantUML 是否允许这样做,但如果不允许,那就对了。如果您按照草图创建 ControlFlow,这将导致中间 Action 创建死锁。它将有两个传入的 ControlFlow,其中只有一个可以传递令牌。所以它会永远等待。同样,左侧的 Action 永远不会启动。

    【讨论】:

    • 好的,我已经添加了我想要的外观的说明。
    • 这是一个完全不同的问题。我的保加利亚语很糟糕,如果你在发帖前把那个 sn-p 翻译成英文也不会受到伤害。
    • 我现在翻译了它,虽然语言并不重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2018-06-23
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 2014-03-20
    相关资源
    最近更新 更多