在领域驱动设计中,强调将行为放在正确的位置。不过,我并不总是确定究竟什么是“正确的”。
考虑这种情况:“客户从银行账户中提取了一笔钱。”
从语法上讲,我们有:
“客户”是一个主题
“撤回”是动词
“金额”是直接对象
'account' 是一个受影响的介词宾语
传统上,客户端会执行这个:account.withdraw(amount)。
这可以理解为:“客户命令银行账户提取一笔钱。” 然而,这在语法上并不对应于原始场景,因为“银行账户”现在是直接宾语,并且不定式从主子句中删除了“提款”和“金额”,因此传达的主要思想是“客户命令账户” .
要遵守 DDD,我们应该将这段代码视为对原始场景的精确描述。这意味着 'withdraw' 方法不会模拟帐户执行的行为(帐户不是主题),而是模拟间接影响它的行为(帐户是介词宾语)并且很可能被重命名'wasWithdrawnFrom'。此外,方法参数表示受客户端而不是对象影响的事物(它是客户端主体的直接对象,而不是对象主体)。
如果我们从这个例子中推断,我们可以看到方法可能代表影响对象的行为(对象不是主体),方法参数可能代表客户主体的直接对象。
然而,方法是否应该代表对象执行的行为尚不清楚。
所以我的问题是:我们应该如何使用方法来建模对象行为?
1) 方法应该严格表示影响对象的行为。(宾语不能作为主语,只能作为语法直接/间接/介词宾语)
2) 方法既可以表示影响对象的行为,也可以表示对象执行的行为。(宾语可以作为主语或语法直接/间接宾语)