丰富领域模型的接口

Interfaces for Rich Domain Models

Rich Domain Models 是否应该有接口来帮助在单元测试期间进行隔离(例如,在测试使用该模型的服务时)?

或者 Rich Domain Model 行为是否应该包含在任何相关的单元测试中?

编辑:

通过富域模型,我特指包含逻辑(即非贫血)的域实体。

您绝对应该在单元测试中涉及域模型行为。嘲笑这部分绝对没有意义。你真的应该只模拟外部系统。

通常,域模型是您应该与其他所有事物隔离开来的部分。域模型可以使用接口,以便与外部系统等隔离

但是,在最常见的情况下,域模型是您要保护的免受外部系统、UI 逻辑等恶化影响的对象 - 而不是相反。

因此,没有理由将接口放在域模型上。

Should Rich Domain Models have interfaces

我会说不,因为

  • 域行为发生在分隔明确的气泡 内。给定的命令触发单个聚合中的更改。从概念上讲,您不必隔离它,因为它基本上只是自言自语。它也可能向外界发出消息(事件),但测试不需要域实体本身是可模拟的。

  • 具体来说,域实体(或值对象)的行为是流动的——它发生在内存中,不应该直接调用较低级别,I/O绑定操作。只要被测系统是一个准备好的小型对象集群(聚合和可能调用它的东西),那么在测试中不模拟东西不会对性能产生影响。

  • 领域模型是具体概念的领域。反映在您的实体或值对象 class/method 名称中的无处不在的语言术语通常是平淡无奇且明确的。那里对抽象和多态性的需求并不多——这就是接口或抽象 类 的用途。该领域与提供服务的通用契约或接口无关,而更多地与发生在问题领域中的现实世界任务有关。