【问题标题】:What UML relationship when one object subscribes to events on another object?当一个对象订阅另一个对象上的事件时,UML 是什么关系?
【发布时间】:2016-08-27 12:53:02
【问题描述】:

对象 B 包含一堆公共事件。

对象 A 订阅这些事件。

这些之间的UML关系是什么?

目前我有一个从对象 A 到对象 B 的定向关联。正确吗?还是应该往另一个方向走?

【问题讨论】:

  • 欢迎来到 StackOverflow,@rygo6。如果您找到了问题的答案,请考虑accepting it(通过单击复选标记),并考虑对其进行投票(通过单击向上箭头)。接受答案向更广泛的社区表明您找到了解决方案,给自己一些声誉积分,并给回答您问题的人一些声誉积分。如果您的问题没有找到满意的答案,请发表评论。

标签: uml staruml


【解决方案1】:

A 和 B 可能都保持对彼此的引用。 A 可能想要取消订阅,而 B 当然必须能够通知 A 事件。因此,我将其建模为双向关系。您甚至可能希望 B 组成所有订阅实例。查看众所周知的Observer Pattern

【讨论】:

    【解决方案2】:

    应该存在从 A 到 B 的依赖关系(从 A 到 B 的虚线箭头)。 UML 规范 2.5 版的第 7.8.4.1 章内容如下:

    依赖关系是一种关系,表示单个模型元素或一组模型元素需要其他模型元素来进行规范或实现。

    在您的情况下,A 需要 B 存在,但 B 不需要 A 存在。也许 B 需要 A 来实现一个特定的接口。在这种情况下,B 依赖于接口,而不依赖于 A 本身。

    您建议建立从 A 到 B 的关联。关联比依赖更强大。这意味着 A 具有 B 类型的属性(好吧,定义有点复杂,请参阅 UML 规范的第 11.5.3.1 章)。这意味着 A 依赖于 B,就像依赖一样,但依赖并不要求 A 具有 B 类型的属性。

    总结一下:

    • 箭头应该从 A 指向 B,而不是从 B 指向 A(除非您对 B 的特定实现依赖于名为 A 的类的存在,这不太可能)。
    • 一个依赖就足够了,但是如果你想让 A 有一个 B 类型的属性,那么你可以画一个关联(实线)而不是一个依赖(虚线)。

    【讨论】:

      【解决方案3】:

      这取决于你想表达什么。

      从逻辑上讲,订阅者 A 必须知道发布者 B,反之亦然,因此您具有双向关系。

      从技术上讲,订阅通常不是由发布者 B 管理,而是由某个调度程序 D 管理。订阅者 A 知道调度程序 D,反之亦然。但是发布者 B 不知道 A,并且根据提供广播机制的平台,甚至可能不知道分发器 D。因此,如果您有一个特定的平台,请找出哪些类型的对象需要实例变量来引用其他的对象,并据此建模关系。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-27
        • 1970-01-01
        相关资源
        最近更新 更多