DDD圈子的“创新”和“传承”(1)没有“多重关联”

9 阅读3分钟

前些天有学员和我讨论问题,他老说到一个词:多重关联。我说,没有这个词,没有这样用的。他说,在《领域驱动设计》上面看的。

于是我去找了2016人邮版的中译本,里面确实有:

图片图片

注意“2版(修订本)”几个字。其实英文原书并没有2版,这里可能说的是,把2010人邮中译本修订了一下,变成了2版中译本。

我们看看修订效果如何。

我找了一下原文:

图片

原文是multiplicity,2016人邮中译本翻译成“有效地减少多重关联”,这是错的。

清华2006中译本的翻译如下:

图片图片

翻译成“减少关联的多重性”,这是正确的。

可能会有DDD Fans质疑:凭什么你说我错?我就不能创新吗?

multiplicity(多重性)

首先,我们来看multiplicity的定义。

multiplicity,多重性,指类的关联的某一端所允许的对象数量范围。

例如下图:

图片

0..*和1分别是关联中“临床试验”端和“药物”端的多重性。

根据以上类图,在某一时刻拍个快照,可以拍到:

某个药物没有临床实验,因为0在“临床试验”端的多重性0..*里面;

某个药物有1个临床实验,因为1在“临床试验”端的多重性0..*里面;

某个药物有多个临床实验,因为*在“临床试验”端的多重性0..*里面。

但是,不应该拍到:

某个临床实验没有药物,因为0不在“药物”端的多重性1里面;

某个临床实验有多个药物,因为*不在“药物”端的多重性1里面。

多个关联

“临床试验”和“药物”之间可以有多个关联:

图片

在某个临床试验中,联合药物和对照药物可以不同,例如:

替雷利珠单抗 联合 安罗替尼 对照 帕唑帕尼。

在某个临床试验中,联合药物和对照药物可以相同,例如:

替雷利珠单抗 联合 安罗替尼 对照 安罗替尼

在某个临床试验中,联合药物和对照药物可以为多个,例如:

伯瑞替尼 联合 安罗替尼+替雷利珠单抗 对照 异环磷酰胺+依托泊苷

多元关联

除了和“药物”之外,“临床试验”还可以和其他类关联,例如:

图片

“临床试验”和“人员”、“药物”、“机构”有关联,而且都有多个关联,每个关联都至少有一端的多重性为多(*)。

“多重关联”的问题

什么叫“多重关联”?是指下面哪一个:

至少有一端的多重性为多的关联?

两端的多重性都为多的关联?

两个类之间或类自身有多个关联?

一个类与多个类有关联?

译者显然是在没有理解以上概念的情况下“创新”了一个词,而且这个“创新”已经传播出去了:

图片

之前也有过“固定规则”(参见《就喜欢把不变式叫做固定规则,不行吗》),如果没人提醒,DDD圈子有可能就把这个像“固定规则”一样传承下去了。

★题外话

通过给某一端加限定符把另一端的多重性降到1,这个表示法在实践中可以不用,表示为限定符所附着那一端的类的约束即可。这很可能只是加在该类上的众多约束中的一个,而且是比较简单的一个。

来都来了

既然来都来了,我们就好好理一理,2016人邮中译本的这一段翻译中,有哪些“创新”和“传承”:

图片

==未完待续==

彩蛋,新出炉的DDD专利:

图片图片