UML建模角色、用户和文档

3

我是一个新的UML建模学生,想要建模一个情景。

我的系统中,管理员创建角色、用户和文档,它们都存在数据库中,并且管理员将选择每个文档可操作此文档的用户以及与之对应的角色。

  • 在系统中,用户不能为特定文档拥有角色
  • 角色可能存在,但不与任何用户-文档关系相关联
  • 对于每个文档,我们有一个可以使用具体角色的用户列表。

问题是,我尝试只使用二元关联进行建模,如果不可能,那么解决方案是什么? 这里是您将看到更多情况的屏幕 enter image description here

正如您所看到的,用户A在doc_1中有role_1角色,在doc_2中也有另一个角色,而用户C在doc_2中没有角色;)

2个回答

1
lipido的想法很好,但遗憾的是所提出的解决方案有一个显然不太重要但非常重要的缺陷,并且不符合您的第三个要求:“角色可以存在而不影响任何用户-文档关系”。将Role建模为关联类时,Role只能作为User和Document对象之间的链接实例存在。在这个解决方案中,Role不能被定义为独立实例!此外,它不允许角色的重复使用

这里有两个解决方案可以解决这个问题。根据其他条件选择其中一个解决方案(请参见注释):

enter image description here

  • 所有3个概念(用户、文档、角色)彼此独立存在,可以自由地和独立地创建和查询。
  • 一个新的“访问”概念模拟了这样一个事实:在特定文档的上下文中,用户具有一个角色(或多个角色)。根据是否应该具有一些更自己的属性(请参见图表),有两种方式来建模访问。作为独立类的访问允许重用角色。在两种解决方案中,访问具有恰好1个文档、1个用户和1个或多个角色。
  • 用户可以在他访问的每个文档中拥有1个或多个角色。
  • 所有可能的查询都是可以的 - getAllUsers、getAllDocuments、gettAllRoles、getUsersRoles(Document)、getRoles(User, Document)等。

更新(评论后)

这里是一个对象图,它解释了对象的运行时结构(它基于第二个类图,即带有关联类而不是n-ry关联的类图):

enter image description here

请查看注释中的说明。注意,Access实例既是类,又是关联实例(链接)。这就是为什么它始终具有两个关联类的单个实例,而在这种情况下只有一个角色。 另一方面,每个用户可以访问许多文档(0.. ),每个文档都可以被0个或多个用户访问(0.. )。

用户在这个文档中只有一个角色,而不是多个角色。用户可能在其他文档中拥有其他角色,或者在特定文档中没有角色。感谢您的帮助性答复。 - user3260388
重用角色很重要吗?角色如何定义?你能给一些例子吗? - Aleks
好的,我的建议都可以解决问题(角色是独立的类,可以通过你所说的“动作逻辑”轻松扩展)。 那么访问概念呢?你需要这里额外的信息吗? - Aleks
是的,保存一些附加信息例如日期会很好...,您能否解释一下基数,并且如果您能给我一些文档链接或教程来理解n-关联和类关联,那将是很好的(y)。 - user3260388
在第二个图中,我们应该使用 [Acess * -- 1 role] 而不是聚合,因为一个访问只应该有一个角色元素吗? - user3260388
显示剩余3条评论

0
如果用户在系统中可以拥有多个角色,则需要指定每个具体的 [User * - * Document] 关联中使用哪个角色。如果是这种情况,您需要:
  1. 普通的 [User * - * Role] 关联,独立于 [User * - * Document] 关系之外,并且另外

  2. IBM中的示例一样描述关联

association class example
(来源:ibm.com)

忘记属性,在您的情况下:

  • Flight -> Document

  • FrequentFlyer -> User

  • MileageCredit -> Role

这个图表模拟了当一个用户与一个文档相关联时,会有一个角色实例来指定在 [用户 * - * 文档] 关系中的具体角色。请注意:您还需要 [用户 * - 1 角色] 关联(不在图片中)如我在第一点之前所说。

如果用户只能有一个角色,则在 [用户 * - * 文档] 关系中不需要关联类,因为角色可以明确地从 [用户 * - 1 角色] 关系中派生出来。


谢谢@lipido,如果我理解正确的话,用户将与角色相关联,因此用户可以拥有一个没有文档的角色? - user3260388
如果用户在应用程序中只能有一个角色,您可以简单地将用户与其角色关联起来,而不必考虑用户文档的关联。类图将是[Role 1-* User - Document],即User与一个Role相关联,并且User和Documents之间存在多对多的关系。 - lipido
用户可以拥有多个角色,我得到了答案,但问题是[用户*-*角色]的关联是否可以将角色与用户独立于文档进行关联。 - user3260388
很遗憾,这不会起作用。角色建模不准确。请查看我的答案。 - Aleks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接