7

我正在开发一个同时使用领域驱动设计和测试驱动开发的项目。在阅读 Evans 的 DDD 书时,我注意到他没有为域中的聚合根定义接口。

如果我同时使用 DDD 和 TDD,我是否应该为每个聚合根定义接口以使聚合根类易于测试和模拟?如果是这样,我是否也应该为聚合根中包含的每个实体定义接口?

从我在 Google 和 StackOverflow 上的搜索中,我找到了与我正在寻找的答案相近的答案,但我在做 DDD 和 TDD 时特别寻求建议,因为我的假设是,在做 TDD 时,可测试性可能在我迄今为止看到的答案中被忽视。

4

2 回答 2

5

不,直接针对聚合进行测试。聚合本身不应注入依赖项,如果特定行为需要依赖项,则通常应将其表示为接口。聚合上的接口是一种不必要的抽象——只有一种行为实现——这就是重点。另外,看看BDD 和 DDD - 行为驱动开发可以看作是 TDD 的演变,并且与 DDD 很好地保持一致。

于 2013-04-16T16:11:45.337 回答
3

我习惯于为所有实体和域服务定义接口,以简化使用域的客户端的测试。此外,这种方法在需要时简化了 AOP。

至于价值对象,这取决于。例如,我不将接口用于事件参数、标识符异常(显然)和一些其他类型的“合同”。但是,我不得不引入接口来简化客户端代码测试的隔离。因此我的经验法则是:客户端需要多少步才能使值对象处于所需状态?如果它不止一个(或两个,我的朋友很有道理:-D),我从一开始就介绍一个接口。

注意我不是在谈论聚合,因为我所有的聚合也是实体。

于 2013-04-16T16:23:32.280 回答