“个体”不是“单一”-《分析模式》漫谈58
DDD领域驱动设计批评文集
做强化自测题获得“软件方法建模师”称号
《软件方法》各章合集
“Analysis Patterns”的第6章“存货和会计”原文:
To achieve this, instances of a posting rule require their own executable methods, a requirement that introduces the important modeling concept of an individual instance method (6.6).
2004(机械工业出版社)中译本的译文为:
标红字的individual instance method,翻译为“个体实例方法”,这是可以的。
2020(人民邮电出版社)中译本的译文为:
标红字的individual instance method,翻译为“单实例方法”。
乍一听,“个体”和“单”差不多,但这里面很可能混淆了individual和 single,意思刚好反掉了。
Individual的意思是“个体”,强调彼此不同。例如:
Prices are quoted on an individual basis.
这句说的是个性报价,一人一价。
Single 的意思是“单一”,强调数量为1。例如:
Prices are quoted on a single‑price basis.
这句说的是单一报价,统一报价。
那么,书里面说的individual instance method属于哪一个情况,是“每个一个”还是“只有一个”?
**********
Individual instance method是Fowler自己起的模式名,除了在《分析模式》里面用,其他地方基本没有,少数有提到也是引用《分析模式》。
我们看书上用的例子,最朴素的类图如下:
有几十个州,就有几十个方法。可以看出,是每个州(实例)一个方法,通过条件语句来决定执行哪一个。
条件语句可以有泛化变体:
有几十个州,就有几十个子类,每个子类各自实现“计算”。这里是把一个州的实例(对象)拔高成一个类,这个类只有一个实例,因此类名称旁标了一个{1},也就是所谓的“单例(singleton)”。
也许2020中译本的“单”是受了这个的影响。
上图还可以变成:
相当于用了策略模式。
但要注意,individual instance method说的是每个实例一个方法,不能因为后两个图有“单例”,所以“用其中有单例类的类图实现的个体实例方法”简称“单实例方法”。individual instance method如果用最朴素那个图,里面就没有“单例”嘛。
我之前写过一篇文章也谈过2020中译本的类似问题:
《分析模式》漫谈08-单继承不是“唯一继承”>>