富域模型的接口

时间:2015-03-25 10:52:03

标签: unit-testing design-patterns domain-driven-design

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

或者Rich Domain Model行为是否应该参与任何相关的单元测试?

编辑:

通过Rich Domain Model我特别指的是包含逻辑(即非贫血)的域实体。

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

  

富域模型是否应具有接口

我说不,因为

  • 域行为发生在分隔良好的气泡内。给定命令触发单个聚合中的更改。从概念上讲,你不必孤立它,因为它基本上只是与自己对话。它也可能向外界发布消息(事件),但测试并不要求域实体本身是可模拟的。

  • 具体地说,域实体(或值对象)行为是流体 - 它发生在内存中并且不应该直接调用较低级别的I / O绑定操作。只要被测系统是一个小的准备对象集群(Aggregate,也许是调用它的东西),就不会对测试中的东西产生性能影响。

  • 域模型是具体概念的领域。在您的实体或值对象类/方法名称中反映的无处不在的语言术语通常是平淡无奇且毫不含糊的。那里不需要抽象和多态 - 这就是接口或抽象类的用途。域不是关于提供服务的通用合同或接口,而是关于在问题域中发生的现实世界任务的更多信息。