UML之间的关系类

Relationship among UML classes

我必须制作电子邮件的 Class 图。抽象之后,我能够创建 2 个 classes:SenderRecipient。起初我认为它们之间的关系是 组合 的聚合,因为没有这 2 class 中的一个就没有电子邮件。 同时,当这 2 classes 相互通信时,另一个出现:E-mail。这个 class 是前两个的 link/connection ,通过意识到这一点,该关联实际上是一个 三元关联 。我是对的还是我错过了什么?

简而言之

是的,三元关联是可能的。但是三思而后行,因为很多人难以阅读仅在一个分支上具有高度多重性的三元关联。

更多详情

有很多方法可以模拟电子邮件、发件人和多个收件人之间的关系。没有一个好的答案。例如:

  • Email class 与 ReceiverSender
  • 有关联
  • Email class 如果您将 Receiver 和 Sender 视为可以共享的电子邮件的一部分(在指向相同发件人或收件人的多封电子邮件之间)。
  • Email class =67=]
  • Email class 与 ReveiverSender 的组合,如果您将每个发件人或收件人视为电子邮件中的嵌入值对象(所以两个具有相同发件人地址的电子邮件每个都有自己的对象副本)。
  • 一个Sender和一个Receiverclass,Email是一个关联class
  • 您建模的三元关联,
  • 更不用说 SenderReceivers 由一个公分母 EmailAccount.
  • 组成或继承的情况

问题是你想如何看待所有这些元素,即你对世界的理解。例如:

  • send() Email:是Sender还是Email还是邮箱?在你的模型中不清楚这个责任在哪里。
  • 没有 SenderReceiver 可以存在 Email 吗?我经常开始写一封电子邮件,然后再添加收件人(以避免意外发送)。如果答案是肯定的,您将消除关联 class.
  • Receiver真的是您系统的一部分吗?如果不是,为什么会有 read() 操作?如果是,拥有单一系统电子邮件系统有什么好处?
  • 您认为三元关联的概念对您的读者来说有多容易理解,哪一方面是更高的多重性?

这引出了您的系统真正处理电子邮件的问题。如果最终不需要用 SendersReceivers 来模拟复杂的关系,那将是一件很可惜的事情,因为您只需要开发一个需要获得 [=21] 的 MTA =] 来自电子邮件并进行一些查询以将电子邮件转发到正确的 IP 地址。

也许 RFC 5322 是您建模的一个良好开端,它解释了发件人和收件人实际上只是电子邮件地址,这将导致具有 Email [=79] 的简化模型=], 和 Address class, 以及相同 class 之间的两个关联(一个以 to 结尾,另一个以 from 结尾)。

您的 class 图的用途是什么?它是域模型(即现实世界的模型)还是源代码模型(即电子邮件应用程序源代码的模型)或数据库模型?

如果您要做的事情的唯一线索是“为 e-mails 创建一个 class 图”,那么一个 class E-mail 就足够了。您已经在你的 E-mail class 中有属性 RecipientSender,所以你可以省略 classes RecipientSender.