我想建立这种 uml 关联,同时避免循环关系

I want to make this uml association while also avoiding a circular relationship

提问人:Issues 提问时间:11/3/2023 最后编辑:ChristopheIssues 更新时间:11/4/2023 访问量:41

问:

因此,我的主要问题是成员角色都有一个称为团队的字段。

我在想也许让团队和角色相互关联,然后成员将链接到角色。但这似乎也很混乱,不正统。

我看到有人说你可以利用聚合,但这仍然会导致循环依赖(据我所知)

我还应该提到,每个团队都有他们可以创建和编辑的自定义角色,而不是预定义的角色集(例如:某些配置文件中的 [ADMIN, STAFF, USER, CUSTOMER])

uml

依赖关系 UML 循环依赖关系 类图

评论

0赞 qwerty_so 11/3/2023
除了您的类看起来更像数据库表这一事实之外,问题中没有描述您的要求。您想对什么进行建模?只有这样,才能给出答案。

答:

0赞 Christophe 11/3/2023 #1

第一张草图

这可能是关联类的典型示例:

  • A 和MemberTeam;
  • 同时,关联本身定义了 的 。这意味着成员对象和团队对象之间的每个链接都将对应于角色的不同实例:RoleMemberTeam

enter image description here

重要说明:请注意,在 UML 中,不应为标识符添加下划线。这是 ERD 中的当前做法,但在 UML 中,这意味着 id 是静态的,即类的每个实例都共享相同的静态属性。

根据你的叙述扮演的角色

你所面临的挑战是,角色是按团队定义的,但似乎独立于履行此角色的人员。有几种可能的解决方案可以解决此问题,例如:

  • 解决方案 1:根据关联类(它赋予团队中成员的角色)的想法进行开发,调用它,并将此关联类与 with 相关联,而 本身与 相关联。相同的角色可以在多个团队中使用:MembershipRoleTeam

    enter image description here

  • 解决方案 2:在 和 之间使用三元关联。角色仍可与团队关联。请注意,三元关联更难处理。MemberRoleTeam

    enter image description here

  • 解决方案 3:如果 完全依赖于 (即角色仅存在于团队的上下文中,不能跨团队使用,例如团队 1 的管理员与团队 2 的管理员具有不同的授权),则可以简化 、 和 和 从角色中推断出成员与团队的关联(在协会名称前的前缀)。RoleTeamMemberRoleRoleTeam/

enter image description here

在前两种情况下,需要添加一些约束,以确保团队成员身份和角色之间的一致性(以避免团队成员使用团队中不存在的角色)。您可以以明文形式执行此操作{ role of the membership must be a role of the membership's team }

在最后一种情况下,您可以考虑在 和之间进行复合聚合(团队端的黑菱形,表示角色的生命周期取决于团队)。但是,与多重性的简单关联就足够了。TeamRole1

你能避免循环依赖吗?

如果你的类是紧密关联的,而且你需要双向的 从一个类导航到另一个类,您将具有循环依赖关系。一个常见的实现是让每个类相互引用。如果这对你来说是个问题,你不妨使用第三个类来表示关联:这个第三个类将依赖于另外两个类。但是,如果一个对象想要自行导航到另一个对象,那么它就需要知道第三个类,并且您将再次获得(另一个)循环依赖关系。问题只是转移到另一个类。这与两个建模概念的相互依存关系有关。

在任何情况下都不应该考虑共享聚合(白色菱形):虽然它仍然非常流行,但 UML 没有为它定义任何特殊的语义,这使得它与简单的关联没有什么不同,并且简单性应该始终占上风)。在此处查看更多详细信息。