【问题标题】:UML 2.0 Can I have an bidirectional extend relationship in between use cases?UML 2.0 我可以在用例之间建立双向扩展关系吗?
【发布时间】:2016-07-20 09:31:31
【问题描述】:

例子:

  • 用例 1:购买饮料
  • 用例 2:购买食物

用户可以进入我们的商店并从订购一些饮料开始。我们可以向他追加销售食品 => 购买食品延伸购买饮料。
反过来也是可能的。一位用户想点一份三明治,我们向他追加了一杯饮料。 => 购买饮料延伸购买食物。
这是建模的正确方法吗,或者如果我们有一个专门用于购买饮料/购买食物的购买项目,使用泛化/专业化会更好。
或者也许还有其他方式......?

【问题讨论】:

  • 您认为哪个系统表示“购买”和增值?对演员本身。您可能正在描述 POS。所以“卖X”基本上应该是UC。

标签: uml extends generalization


【解决方案1】:

您在使用<<extends>> 时尝试功能分解(这种方式)。用例不是关于系统的功能分解,而是围绕正在考虑的系统 (SUC) 交付给参与者的独特附加值的行动综合。试着从这个角度来看它。那么SUC(我猜是销售系统)的那些独特附加价值是什么?它是Sell Goods,或者Sell FoodSell Drinks 之间存在差异,那么它们是不同的UC,或者没有,在这种情况下您不需要两个UC。

【讨论】:

    【解决方案2】:

    扩展永远不是双向的(即扩展关系始终是有向的)。

    在您的情况下,您只有一个 Thomas Kilan 建议的用例。

    如果您一直坚持区分用例,那么泛化是一个不错的选择,但在您的情况下很可能没有必要。

    虽然这种情况极为罕见(绝对不是您的情况),但如果这代表逻辑,则不禁止在相同用例之间以相反方向使用两个扩展关系(或使用扩展关系构建其他形式的循环)系统(例如管理两个单独的实体,每个实体可以单独处理或与两者中的任何一个一起作为初始实体处理)。在实践中,这样的循环可以在与(未来)系统用户的讨论中解决,应该避免。 另一方面,包含关系永远不会创建循环,如果这样做,模型就无效。

    【讨论】:

    • 嗨@Ister。 “在实践中,这样的循环可以在与(未来)系统用户的讨论中解决,应该避免”您能否解释一下,为什么应该避免这种情况?我正面临着这种情况。
    • 我不会为此引用任何消息来源,但现实是这种循环的存在几乎不是现实生活中的场景。没有什么好的理由可以避免这种情况。首先,这通常表明 UC 图中过度使用了扩展和包含(它们应该是稀疏的),其次可能导致歧义,甚至是无限循环,第三,它们会导致难以维护的流程.最后,在现实生活中,这种循环通常是“事情是如何完成的”的一种表示,而不考虑“目标是什么”,这使得其中一个 UC 成为真正的主人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2011-06-09
    相关资源
    最近更新 更多