You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DDD中含外部服务交互的业务逻辑应置于领域模型还是命令处理程序?

业务逻辑与外部服务的处理位置建议

优先在CommandHandler中完成外部服务校验,再调用领域模型的ChangeName方法,原因如下:

  • 领域模型要保持"纯净",专注处理自身核心规则。User的职责是维护用户状态和内部业务约束(比如姓名格式合法性),而订阅权限是依赖外部服务的规则,将IBillingService注入领域模型会打破这种纯净性,不仅增加模型的耦合度,还会让单元测试变得复杂——测试ChangeName时不得不额外mock外部服务。

  • CommandHandler的核心职责就是协调领域模型与外部依赖,处理流程性逻辑。它可以先调用IBillingService获取用户的订阅信息,完成权限校验后,再调用User.ChangeName()执行姓名修改。这样分工清晰:Handler负责外部依赖交互与前置校验,领域模型只负责自身状态的合法变更。

  • 若订阅权限是用户多个操作都需要依赖的核心规则,也可以考虑将订阅等级数据作为参数传入领域模型方法,而非直接注入服务。比如Handler先获取到订阅等级,再调用User.ChangeName(newName, currentSubscriptionTier),让User内部判断权限。这种方式既保证了领域模型对业务规则的封装,又避免了依赖外部服务。

内容的提问来源于stack exchange,提问作者Hooch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 14:17:32