【问题标题】:Can the included/extended use-case be initiated by another actor?包含/扩展的用例可以由另一个参与者启动吗?
【发布时间】:2018-04-22 12:50:21
【问题描述】:

您好,我希望接待员和经理能够查看工作类型和费率并随后对其进行更新。但是,技术人员只能查看,不能更新。图表有效吗?

我读到扩展用例是由发起基本案例的参与者发起的。我应该如何区分技术人员只能启动基本案例而不是扩展案例?我不应该放置扩展关联吗?包含的用例呢?

对不起,如果之前有人问过这个问题。

【问题讨论】:

    标签: uml use-case use-case-diagram


    【解决方案1】:

    你既不应该“包含”也不应该“扩展”

    查看工作类型和费率编辑工作类型和费率是完全有效的独立用例。

    一般来说,将用例链接在一起是一个坏主意,因为您通常一个接一个地执行。 您不应该尝试使用用例对活动序列进行建模。为此使用您的业务流程分析。

    您可以使用后置条件和前置条件来约束用例的执行。实际上,您的 Edit 用例实际上并不需要特别执行 View 用例,对吗?它可能只需要选择一个工作类型。因此,它可以在任何具有表明选择工作类型的后置条件的用例之后立即执行。

    只要在用例开始之前选择了工作类型,哪个用例执行此操作与编辑用例无关。可能有 10 种不同的用例会导致选择一种工作类型。

    我认为“扩展”是完全错误的。扩展用例通常是不完整用例,将它们的行为插入到完整用例中是扩展用例中定义的特定扩展点。中的扩展用例对扩展用例没有任何了解,不需要也不使用这种行为的结果。

    我发现“扩展”用例适用的少数情况是监控用例。例如,监控系统中打开的工单数量并在超过某个阈值时向管理员发送警报的用例。

    如果您仍然坚持将用例链接在一起,例如,如果您真的表示您只能在执行用例后编辑费率查看工作类型和费率 我会反其道而行之。包括用例查看工作类型和费率从用例编辑工作类型和费率,可能是第一步。

    这两种解决方案(单独的用例,或包括从编辑到查看)都​​解决了您关于不同用户权利的问题,因为现在很清楚谁可以做什么。

    【讨论】:

    • 是的,incl/excl 被误认为是链接,这不是他们的本意。因此,如果一个人不确定它的用途,最好不要使用它。我可能会在答案中添加评论以澄清这一点。
    • 尽管我认为您对完整性的看法是不对的。阅读第 638 页。
    • @ThomasKilian 我做了,它指出:扩展的 UseCase 通常定义了本身可能不一定有意义的行为,我将其翻译为“不完整”。扩展的用例必须自己“完整”,因为他们不了解扩展用例。
    • 尤其是关于 include:由于 Include 关系的主要用途是复用公共部分,因此基本 UseCase 中剩下的内容通常本身并不完整,而是依赖于包含的部分是有意义的。 这与你所说的相反。所以include 使得主 UC 不完整!
    • 可能不是是关键部分。
    【解决方案2】:

    我会这样建模:

    ManagerReceptionist 在这种情况下具有相同的作用,这就是我使用概括的原因。在不知道域的情况下,这似乎还可以,但这只是一个建议。

    <<extend>>{not allowed for actor Tech} 的约束,这明确排除了此参与者进入此(可选)用例。

    没有必要同时将ReceptionistUpdate... 关联起来,因为它是View... 的扩展,除非您希望能够在没有View 的情况下先使用Update

    注意关于<<include>>/<<extend>>:它们并不意味着链接用例。 UML 规范声明(第 638 页):

    当有一些额外的行为可能有条件地添加到一个或多个用例中定义的行为时,可以使用扩展。

    包含关系旨在用于两个或多个 UseCases 行为的共同部分。然后将此公共部分提取到一个单独的 UseCase 中,以包含在所有具有该部分公共的基本 UseCases 中。

    现在<<include>> 看起来就像个混蛋。用例是关于一个独特的附加值。如果在多个用例中存在行为重复,这种独特性可能会受到质疑。在任何情况下,这些关系通常只被视为功能分解。那将是完全错误的。从我的观点来看,如果没有这些关系,UML 规范会更好。

    在上图的上下文中,它代表了一种模式,您可以在其中查看某些内容,然后才能使其可编辑。如果没有 <<extend>>Update 中设置约束,告诉 { can only be reached after View... },则最好有两个单独的气泡。

    【讨论】:

    • 但是如果你设置了一个包含和关联的接待员来查看和更新​​,你就不需要约束...
    • @granier <<include>>总是执行,在这种情况下似乎没有意义 - 它是可选的。
    • 更新而不查看您更新的内容哼哼我必须弄清楚它可能是什么
    • @granier 简单:查看表单和编辑表单不同。尽管 Edit 显示了值,但它们是可编辑的。视图不允许编辑。它们显然是不同的用例。
    • 是的,前提条件就足够了我的人类逻辑告诉我,这不会有语义差异:-)
    【解决方案3】:

    我会通过包含更改扩展。要更新作品,您必须查看它。必须查看。

    在您的图表中,Manager 和 Receptionnist 是等价的,仅使用此模式,您只能定义一个参与者。或者 Manager 从 Receptionnist 继承的模型。

    为避免错误,如果您这样做,您必须确保接待员和经理也可以在不更新的情况下激活视图用例。否则必须删除一些关联。

    【讨论】:

    • 如果你改变扩展包含是。
    • 哈哈,该图只是实际模式的快照,以说明我的问题。接待员和经理在其他用例中扮演不同的角色。但是,该图是否充分/合法地说明只有经理和接待员才能更新? (尽管他们也必须先查看)。是的,他们无需更新即可查看。
    • 不过,如果我只是删除两个用例之间的关联会更好吗?
    • 您可以,但如果您删除包含(假设您通过包含更改扩展)进行更新,则不会强制查看。如果您想要更新,您必须执行已完成的操作才能查看,您必须保留包含。并认为经理和接待员之间的继承:您的架构将更易于阅读。
    • @granier 也许你应该澄清你的意思是从编辑用例到视图用例的包含还是相反。
    猜你喜欢
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多