[答疑]《实现领域驱动设计》的译者其实没错?(一)>>(4)原文:If so, is there
some practical limit to the number of objects that should be allowed to reside
in the graph?中译本译文:如果是这样,对于存在于这个树中的对象有没有一个实用的数目限制?我的剖析:这句的问题,主要还是之前提到的graph译成“树”以及“这个树”,还有allowed的漏译。建议译文:如果是这样,对于允许驻留在该图上的对象数目,有没有一些实际的限制?(5)原文:Since one
Aggregate instance can reference other Aggregate instances, can the
associations be navigated deeply, modifying various objects along the way?中译本译文:既然一个聚合可以引用另一个聚合,我们是否可以深度地递归遍历下去,并且在此过程中修改对象呢?问题一:“遍历”属于概念不清。我的剖析:首先,原文用词的是navigate,意思是“导航”,并没有使用traversal、traverse等词。traversal、traverse等词在计算机科学的特定场景中可译为“遍历”,意思是访问所有结点。可是,整体对象在履行责任时,并不一定涉及其所有直接或间接的部分对象。注意,是“不一定”,需要“访问所有结点”的责任当然可以有。如图8的类图:
图8某个时刻的对象图可能如图9:
图9在发生某次责任分配时,有可能只涉及到图9中的某些对象,不存在“遍历”,如图10:
图10(红色箭头表示责任分配)最简单的组合关联就是类和属性了,在某次操作执行期间,对象并不一定要“遍历”其所有属性的值嘛。问题二:“深度地递归”属于概念不清和编造。我的剖析:原文是“navigated deeply”,译者也可能是看到deeply之后,想起有“深度遍历”,于是把navigated误解成“遍历”,然后来了一个“深度地递归遍历”。“深度遍历”属于不严谨用语,都遍历了,无所不至,还不够深吗,难道还有“浅度遍历”不成?严谨的用语应该是“使用深度优先搜索(算法)的遍历”。不过,为了省几个字,现在不只是口头交流,很多正式出版的书和文章也堂而皇之写“深度遍历”,这是很无奈的事情。译者特地在“深度”后面插入了一个“地”,似乎说的又不是“使用深度优先搜索(算法)的遍历”,而是说要遍历得很深——又回到前面说的了,都遍历了,无所不至,还不够深吗?但是再往下看,译者又在“深度地”后面自作主张加了原文没有的“递归”二字,变成“深度地递归遍历”,似乎又转回来了,还是在说“使用深度优先搜索(算法)的遍历”。可惜,加的“递归”二字又是另一个概念不清。“深度遍历”不意味着要“递归”,也可以“非递归”啊!进一步展开来说,各种“递归”都可以改成“非递归”啊!可能是加上“递归”二字觉得比较有格调吧。问题三:漏译了instance我的剖析:原因同前,类和对象的概念混淆。建议译文:Since one Aggregate
instance can reference other Aggregate instances, can the associations be
navigated deeply, modifying various objects along the way?既然一个聚合实例可以引用其他聚合实例,那么关联是否可以向深处导航,沿途修改各种对象呢?以下是扩展Eric Evans在“Domain-Driven Design”一书中的很多地方提到关联时,使用了traversal一词,这带来了很多尴尬。如图11的“Domain-Driven Design”原文: