前些天有学员和我讨论问题,他老说到一个词:多重关联。我说,没有这个词,没有这样用的。他说,在《领域驱动设计》上面看的。
于是我去找了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专利: