【问题标题】:how to avoid redundant association with composite relationship如何避免与复合关系的冗余关联
【发布时间】:2014-09-28 14:07:21
【问题描述】:

我在两个对象(A 和 B)之间有复合关系(A 由许多 B 组成)。现在另一个类 (C) 与类“B”具有一对多的关联关系。我希望能够从类 (C) 中检索类 (A) 的所有实例。 如何在不创建冗余关联的情况下执行此操作?由于“C”基本上有一个“B”列表,我不能只遍历所有这些,询问你的“A”是什么,并最终返回一个“A”列表到“C”。

我真的希望有人能理解这一点,并且不会觉得它完全令人困惑!

谢谢

更新:
数据集有一个已定义变量的列表。一个活动可以从每个数据集中选择一个变量子集并赋予它们一些属性,因此使用关联类。现在,如果我希望能够从 Activity 实例中检索它注册的数据集,我如何在 UML 和对象实现中实现这一点?

【问题讨论】:

  • Java 伪代码或 ascii 艺术类图或类图图片将使您的问题更具可读性(或者只是从现实世界的隐喻中给出 A、B、C 名称)。您是否询问how to model association navigability 或如何在代码中实现UML 设计以便您可以轻松地从一个指针跳转到另一个?
  • 新个人资料,还不能上传图片!我希望我更新的描述更有意义
  • A=Dataset, B=variable, C=Activity, Attribute 将 B 和 C 绑定在一起,您想知道如何在 UML 中绘制它以便 B->C->A 可导航吗?顺便说一句:为什么你不能只遍历“Bs”列表?
  • 问题是我是否需要从活动中定义一个“检索数据集”的方法。我应该允许什么样的关系而不是多余的?通过在活动中定义数据集的集合或只是返回数据集的方法(使用依赖关系?)进行关联,在后一种情况下,每次调用 getDatasets 时迭代变量不被视为重复过程?
  • 在实现中,您可以将查询 C_Activity.getAllDatasets() 的结果缓存在 C_Activity 内部的 List 类型的私有成员变量中。此缓存将通过自动导航原始关系来计算,并在某些关系更改时失效。我认为现在谈论您的代码而不是 UML 绘图会更好。您能否编辑您的问题并向我们展示 4 个 A_Dataset、B_variable、C_Activity、Attribute 类的一些(例如 Java)代码?

标签: uml data-modeling class-diagram


【解决方案1】:

我假设您的图表看起来像这样:

如果 C 引用了 B,而 B 引用了 A,那么从 C 导航到 A 应该没有问题。不需要任何额外的冗余关系。

【讨论】:

  • 即使从 C 导航到 A 意味着遍历 B 的子集以找到关联的 A? ..谢谢
  • 我猜是的。除非你想在 C 和 A 之间建立关系,但我建议不要这样做
【解决方案2】:

根据您的任务,不可能从所有 C 中取出所有 B。因为没有句子表明任何 B 属于某个 C。

相反,因为 A 有 B 的组合(注意,A 不是组合,A 有 B 的组合,因为 A 也可以有很多其他东西),并且任何 B 必须属于某个 A 对象,你可以很容易地从所有 A 中得到所有 B。仅将 B 的列表创建为一个集合,以免有多个值。

但是即使关联 B-A 包括 B->A 连接,也无法从 B 中获取所有 A。因为有些 A 可能是空的。你永远也达不到他们。来自 B 的。

因此,出于两个重要原因,您不能从 C 中获取所有 A。并且没有多余的关联会有所帮助。

至于“更新”后设置的问题,

  • 要从变量中获取全部,请使用

Dataset Activity // 这个变体最容易添加关联。

  • 为了从活动中获取连接的数据集,

数据集

但是请注意,它没有更新,这是不同的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2021-04-28
    • 2019-01-02
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多