UML 域模型 - 如何对两个实体之间关联的多个角色进行建模?

标签 uml constraints domain-model

假设有一个用户有任务的场景。每个用户可以是任务的观察者或 worker 。

此外, worker 可以归档他在给定任务上的工作时间。

下图正确吗?我环顾四周的领域模型,但没有看到一个具有两个关联的模型(适用于、 watch )。可以接受吗?

enter image description here

编辑:这个场景怎么样?用户可以向另一个用户提出要约。下图显示了一种可能的建模方法。

但是,在该图中,用户似乎可以向自己提出报价。是否可以对一些约束进行建模,或者是否可以在开发线上进一步处理?

enter image description here

最佳答案

原则上这是正确的,这就是对两个类之间的多重关系进行建模的方式。

对于约束,UML 使用 OCL(对象约束语言),因此您可以说关联是互斥的(xor - 互斥或)。

另请注意,命名关联的最终角色通常是个好主意。

enter image description here

关于其中一条评论说

There are no UML police to flag you down for being "unacceptable".

这就像在说:没有代码警察会标记你编写糟糕的代码。

您创建图表来传达信息(无论如何用于学校项目),如果您偏离标准或最佳实践,其他人就更难理解您的图表。

就像有检查代码常见问题的 linter(jslint,...)一样,对于模型,也有模型验证可以做同样的事情。

此外,模型就像代码一样,并不是一成不变的,因此当您找到更好的方式来表达您的领域时,不要害怕修改它们。

更新

正如吉姆恰本地指出的那样,您通常不是作为用户(或个人)而是作为角色来做事。例如。当你是学生并填写表格时,没有人关心你是人类,而是关心你是一名学生。通常,一个人还会有几个不同的角色(您可以是学生、助教、教授等)

以这种方式分离它可以使领域更加清晰,因为您只关心角色,而不关心实现它们的人。

enter image description here

关于UML 域模型 - 如何对两个实体之间关联的多个角色进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36100826/

相关文章:

c++ - 您如何称呼 2 个 .c 文件之间的这种关系?

UML2 类图 - 用于泛化的嵌入式符号?

mysql - 在 MySQL 表上添加新触发器时犯了什么错误?

sql-server - 这种情况下最好的数据库结构是什么?

asp.net-mvc - 域模型与服务层中的 ASP.NET MVC 业务逻辑

c++ - 如何在 UML 类图中显示私有(private)继承关系

methods - 如果我在序列图中有一个对象用户,并且我想让该对象与界面交互,我应该使用它自己的函数吗?

java - 使用 Jackson,如何将 JSON 解码到 Java Map,但将特定的嵌套成员作为域实例?

sql - 正则表达式约束拒绝 Postgresql 中明显有效的数据

neo4j - 你能监控 neo4j 约束的进度吗