Unit testing 富域模型的接口
在单元测试期间(例如,在测试使用该模型的服务时),富域模型是否应该有接口来帮助隔离 或者富域模型行为是否应该包含在任何相关的单元测试中 编辑:Unit testing 富域模型的接口,unit-testing,design-patterns,domain-driven-design,Unit Testing,Design Patterns,Domain Driven Design,在单元测试期间(例如,在测试使用该模型的服务时),富域模型是否应该有接口来帮助隔离 或者富域模型行为是否应该包含在任何相关的单元测试中 编辑: 通过Rich Domain Model,我特别指的是包含逻辑(即非贫血)的域实体。您肯定应该在单元测试中涉及域模型行为。嘲笑这一部分是毫无意义的。实际上,您应该只模拟外部系统。通常,域模型是您应该与其他系统隔离的部分。域模型可以使用接口,以便与外部系统隔离,等等 然而,在最常见的场景中,域模型是您试图防止外部系统、UI逻辑等不断恶化的影响的对象,而不是相
通过Rich Domain Model,我特别指的是包含逻辑(即非贫血)的域实体。您肯定应该在单元测试中涉及域模型行为。嘲笑这一部分是毫无意义的。实际上,您应该只模拟外部系统。通常,域模型是您应该与其他系统隔离的部分。域模型可以使用接口,以便与外部系统隔离,等等 然而,在最常见的场景中,域模型是您试图防止外部系统、UI逻辑等不断恶化的影响的对象,而不是相反 因此,没有什么理由将接口放在域模型上 富域模型应该有接口吗 我会说不,因为
- 域行为发生在分隔良好的气泡内。给定的命令在单个聚合中触发更改。从概念上讲,您不必孤立它,因为它基本上只与自身对话。它还可能向外部世界发出消息(事件),但测试并不要求域实体本身是可模拟的
- 具体地说,域实体(或值对象)行为是流动的,它发生在内存中,不应该直接调用较低级别的I/O绑定操作。只要被测系统是一个小的准备好的对象集群(聚合,可能还有调用它的东西),那么在测试中不模拟东西不会对性能产生任何影响
- 领域模型是一个具体概念的领域。反映在实体或值对象类/方法名称中的普遍存在的语言术语通常是平淡无奇的。这里不需要太多的抽象和多态性——这就是接口或抽象类的用途。该领域不太关注提供服务的通用合同或接口,而更关注问题领域中发生的实际任务