实体“有”联系人或实体“”为“”.接触

本文关键字:实体 接触 联系人 | 更新日期: 2023-09-27 17:50:17

在构建LOB应用程序时出现了这个问题。问题是,根据您的经验,将Contact关系建模为继承还是委托更好?
例如:
联系人:有名字,姓氏,全名,地址,电子邮件等。
客户拥有所有这些以及其他特定于客户的东西。
经销商拥有所有这些以及其他经销商特有的东西。
一个……已经……和…等
现在,对于客户和经销商来说,是从Contact中派生更好,还是有Contact参考更好?
注意:我知道这可能是一个争论的问题,但我想知道有经验的开发人员如何绕过这个

实体“有”联系人或实体“”为“”.接触

有一本名为《分析模式》的书,详细介绍了如何对这种结构(以及其他许多结构)建模。在这本书中,继承是用来建模一个基本的Party类型,以后可以子类化为更具体的PersonOrganization类。你可以在这里找到一些信息(pdf)。

我认为继承在这种情况下是一个很好的解决方案,因为您清楚地建模了is-a关系。您只需要注意不要仅仅为了代码重用而滥用继承。

您应该更喜欢组合而不是继承,特别是在项目的第一阶段。也许在未来你会来Party模式,如果这给你一个显著的优势。

(还请注意,书中指出使用Party(5)的明显情况是当您的模型中有人员和组织并且您看到共同的行为时。行为在这里是优先的。当您对数据建模时,请选择组合)。

根据这两个词的公认解释,简单的客户并不是一种联系人。

你不能仅仅因为一个文件和一个人都有一个名字就用继承来建模。尽管在某些(奇怪的)领域,它们都继承了一个公共的"NamedThing"接口,但这是有意义的。

总的来说,在大多数情况下我会选择"has a",但并非总是如此。