域模型应该如何耦合?所有聚合根应该是接口吗?

我们终于建立了一个领域模型。域模型包括用于将域对象松散耦合到持久性的接口。然而,我想知道域模型对象应该如何耦合到彼此。 订单是指客户还是客户? 这篇文章提到了积极地解耦对象的问题,并且似乎不鼓励“过度使用[接口]”。然而,我没有看到我如何真正单元测试我的域实体,除非我可以模拟他们依赖的其他实体,这需要松耦合。 我也不确定想要一个可以换掉片段的域模型是多么现实。     
已邀请:
我不介意在协作者的单元测试中使用具体的协作者: 1)有一套全面的单元测试,明确说明其行为。 2)安排不难。 3)不利用外部资源(或违反任何相关指南)。 我们一直使用框架类(比如,
DateTime
string
)这样做 - 除非聚合的孩子异常复杂,否则你也应该信任它。     
  域模型包括用于将域对象松散耦合到持久性的接口。 持久性持久存在您的对象。它知道你的对象以便坚持它们。将持久性与模型分离并不能为您提供任何帮助。域中的任何更改都必须反映在持久层中, 在进行DDD时,您与领域专家一起确定无处不在的语言,然后在代码中表示。我还没有看到域专家提到一个接口。通过在您的域中识别正确的概念来解耦模型中的AR。您可能为某些域服务定义了接口,但要确保它们是您域中的真实服务提供者,而不是您错过的某些概念。   我也不确定想要一个可以换掉片段的域模型是多么现实。 你是对的,这是不现实的。您可以交换某个服务提供商的实施,但是AR中的实体?我不这么认为。     
在做DDD时你不想“真正解耦实体”。您应该首先将域模型划分为应该解耦的聚合。 Inside Aggregates不需要模拟任何东西,因为Aggregate应被视为单元测试的“单位”。 此外,将尽可能多的行为移动到Value Object将帮助您使您的域模型可测试,因为Value Objects(根据定义,它是不可变的)非常容易测试。     

要回复问题请先登录注册