我想进行这个uml关联,同时也避免循环关系

问题描述 投票:0回答:1

所以我的主要问题是MembersRoles都有一个名为团队的字段。

我在想也许可以将团队和角色相互关联,然后将成员与角色关联起来。但这看起来也很混乱和非正统。

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

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

uml diagram class-diagram
1个回答
0
投票

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

  • Member
    Team
  • 之间存在关联
  • 同时,关联本身定义了
    Role
    Member
    Team

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

  • 解决方案 1:发展关联类的思想(赋予团队中成员的角色),将其称为
    Membership
    ,并将该关联类与
    Role
    关联,其本身又与
    Team
    关联。
  • 解决方案2:使用
    Member
    Role
    Team
    之间的三元关联。角色仍然可以与团队相关联。请注意,三元关联更难处理。
  • 解决方案3:如果
    Role
    完全依赖于
    Team
    (即角色仅存在于团队上下文中,不能跨团队使用,例如团队1的管理员可能与管理员拥有不同的权限)团队 2),您可以简化并将
    Member
    Role
    关联,将
    Role
    Team
    关联,并推断出(在协会名称前加上前缀
    /
    )该成员与从角色开始团队。

在前两种情况下,您需要添加一些约束以确保团队成员身份和角色之间的一致性(以避免团队成员使用团队中不存在的角色)。

在最后一种情况下,您可以考虑

Team
Role
之间的复合聚合(团队方面的黑色菱形,表示角色的生命周期取决于团队)。

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

建议:由于您有角色中团队的名称,我强烈建议考虑解决方案 3,并将此属性设为派生属性(/team : String),或者最好放弃它。

循环依赖:如果您的类是关联的并且您需要双向 关联,一个常见的实现是让每个类互相引用。如果这对您来说是个问题,您也可以有一个代表关联的第三个类:这个第三个类将依赖于其他两个类。但是,如果一个对象想要导航到另一个对象,则它需要了解第三个类,并且您将再次陷入(另一个)循环依赖关系。这仅仅与两个建模概念的相互依赖性有关。

© www.soinside.com 2019 - 2024. All rights reserved.