UML之间的关系类
Relationship among UML classes
我必须制作电子邮件的 Class 图。抽象之后,我能够创建 2 个 classes:Sender 和 Recipient。起初我认为它们之间的关系是 组合 的聚合,因为没有这 2 class 中的一个就没有电子邮件。
同时,当这 2 classes 相互通信时,另一个出现:E-mail。这个 class 是前两个的 link/connection ,通过意识到这一点,该关联实际上是一个 三元关联 。我是对的还是我错过了什么?
简而言之
是的,三元关联是可能的。但是三思而后行,因为很多人难以阅读仅在一个分支上具有高度多重性的三元关联。
更多详情
有很多方法可以模拟电子邮件、发件人和多个收件人之间的关系。没有一个好的答案。例如:
Email
class 与 Receiver
和 Sender
有关联
Email
class 如果您将 Receiver 和 Sender 视为可以共享的电子邮件的一部分(在指向相同发件人或收件人的多封电子邮件之间)。Email
class =67=]
Email
class 与 Reveiver
和 Sender
的组合,如果您将每个发件人或收件人视为电子邮件中的嵌入值对象(所以两个具有相同发件人地址的电子邮件每个都有自己的对象副本)。
- 一个
Sender
和一个Receiver
class,Email
是一个关联class
- 您建模的三元关联,
- 更不用说
Sender
和 Receivers
由一个公分母 EmailAccount
. 组成或继承的情况
问题是你想如何看待所有这些元素,即你对世界的理解。例如:
- 谁
send()
Email
:是Sender
还是Email
还是邮箱?在你的模型中不清楚这个责任在哪里。
- 没有
Sender
或 Receiver
可以存在 Email
吗?我经常开始写一封电子邮件,然后再添加收件人(以避免意外发送)。如果答案是肯定的,您将消除关联 class.
Receiver
真的是您系统的一部分吗?如果不是,为什么会有 read()
操作?如果是,拥有单一系统电子邮件系统有什么好处?
- 您认为三元关联的概念对您的读者来说有多容易理解,哪一方面是更高的多重性?
这引出了您的系统真正处理电子邮件的问题。如果最终不需要用 Senders
和 Receivers
来模拟复杂的关系,那将是一件很可惜的事情,因为您只需要开发一个需要获得 [=21] 的 MTA =] 来自电子邮件并进行一些查询以将电子邮件转发到正确的 IP 地址。
也许 RFC 5322 是您建模的一个良好开端,它解释了发件人和收件人实际上只是电子邮件地址,这将导致具有 Email
[=79] 的简化模型=], 和 Address
class, 以及相同 class 之间的两个关联(一个以 to
结尾,另一个以 from
结尾)。
您的 class 图的用途是什么?它是域模型(即现实世界的模型)还是源代码模型(即电子邮件应用程序源代码的模型)或数据库模型?
如果您要做的事情的唯一线索是“为 e-mails 创建一个 class 图”,那么一个 class E-mail
就足够了。您已经在你的 E-mail class 中有属性 Recipient
和 Sender
,所以你可以省略 classes Recipient
和 Sender
.
我必须制作电子邮件的 Class 图。抽象之后,我能够创建 2 个 classes:Sender 和 Recipient。起初我认为它们之间的关系是 组合 的聚合,因为没有这 2 class 中的一个就没有电子邮件。
同时,当这 2 classes 相互通信时,另一个出现:E-mail。这个 class 是前两个的 link/connection ,通过意识到这一点,该关联实际上是一个 三元关联 。我是对的还是我错过了什么?
简而言之
是的,三元关联是可能的。但是三思而后行,因为很多人难以阅读仅在一个分支上具有高度多重性的三元关联。
更多详情
有很多方法可以模拟电子邮件、发件人和多个收件人之间的关系。没有一个好的答案。例如:
Email
class 与Receiver
和Sender
有关联
Email
class 如果您将 Receiver 和 Sender 视为可以共享的电子邮件的一部分(在指向相同发件人或收件人的多封电子邮件之间)。Email
class =67=]Email
class 与Reveiver
和Sender
的组合,如果您将每个发件人或收件人视为电子邮件中的嵌入值对象(所以两个具有相同发件人地址的电子邮件每个都有自己的对象副本)。- 一个
Sender
和一个Receiver
class,Email
是一个关联class - 您建模的三元关联,
- 更不用说
Sender
和Receivers
由一个公分母EmailAccount
. 组成或继承的情况
问题是你想如何看待所有这些元素,即你对世界的理解。例如:
- 谁
send()
Email
:是Sender
还是Email
还是邮箱?在你的模型中不清楚这个责任在哪里。 - 没有
Sender
或Receiver
可以存在Email
吗?我经常开始写一封电子邮件,然后再添加收件人(以避免意外发送)。如果答案是肯定的,您将消除关联 class. Receiver
真的是您系统的一部分吗?如果不是,为什么会有read()
操作?如果是,拥有单一系统电子邮件系统有什么好处?- 您认为三元关联的概念对您的读者来说有多容易理解,哪一方面是更高的多重性?
这引出了您的系统真正处理电子邮件的问题。如果最终不需要用 Senders
和 Receivers
来模拟复杂的关系,那将是一件很可惜的事情,因为您只需要开发一个需要获得 [=21] 的 MTA =] 来自电子邮件并进行一些查询以将电子邮件转发到正确的 IP 地址。
也许 RFC 5322 是您建模的一个良好开端,它解释了发件人和收件人实际上只是电子邮件地址,这将导致具有 Email
[=79] 的简化模型=], 和 Address
class, 以及相同 class 之间的两个关联(一个以 to
结尾,另一个以 from
结尾)。
您的 class 图的用途是什么?它是域模型(即现实世界的模型)还是源代码模型(即电子邮件应用程序源代码的模型)或数据库模型?
如果您要做的事情的唯一线索是“为 e-mails 创建一个 class 图”,那么一个 class E-mail
就足够了。您已经在你的 E-mail class 中有属性 Recipient
和 Sender
,所以你可以省略 classes Recipient
和 Sender
.