知识卡片
做什么怎么做分离
内容
领域对象应表达“做什么”和规则约束,具体技术步骤、持久化、通知等“怎么做”交给应用层或基础设施。发散:把流程脚本塞进实体,会污染模型;把业务规则扔给服务,也会掏空模型。
参考来源
- 位置:《复杂软件设计之道》第3章《聚合设计》"3.3.6 做什么和怎么做的分离"一节(源文件:_chapter_text/ch03.txt)
- 结论依据:原文明确"'是否可以支付'属于决策权,决定方向性,是领导的职责,而'如何进行支付'则是办事员的职责",聚合负责发出"可支付/可发货"这类决策事件,具体支付扣款等执行细节交给应用层/基础设施,并强调"防止聚合变得过大,回到传统事务服务脚本的过程化编程"。
- 原始内容:"是否可以支付"属于决策权,决定方向性,是领导的职责,而"如何进行支付"则是办事员的职责……在订单聚合中聚合了关键的决策权:是否可支付?是否可发货?当业务规则检查通过后,可以发出"可支付事件"和"可发货事件"……这里是向支付接口发出支付扣款命令,而不是直接在这里进行扣款的具体操作。