知识卡片
命令而非询问原则
内容
“命令而非询问(tell, don’t ask)”原则:一个对象应命令其他对象做什么,而不是查询其他对象的状态来自己决定做什么。顾客应命令钱包“钱够吗”(wallet.isEnough(payment)),而非查询钱包里有多少钱再由顾客自己判断。据此可继续优化:Wallet 不暴露 totalMoney,由它自己判断余额是否足够。发散:把返回原始状态供调用者判断的 getter,改造为返回业务判定结果的行为方法(isEnough/canX),是消除依恋情结的常用手法。
参考来源
- 位置:《解构领域驱动设计》附录A A.2.1(源文件:_epub-src/OEBPS/034.xhtml)
- 结论依据:原文提出 tell-don't-ask 原则并以钱包判断余额为例说明。
- 原始内容:这个原则要求一个对象应该命令其他对象做什么,而不是去查询其他对象的状态来决定做什么。