C# DDD为什么在域服务上创建接口?

C# DDD为什么在域服务上创建接口?,c#,interface,domain-driven-design,C#,Interface,Domain Driven Design,我将DDD用于通过3个不同的应用程序(工作流)服务使用相同域层(域服务)的3个应用程序。基础架构和UI层无法访问域服务。我还通过域服务构造函数传递所有外部依赖项,如存储库。那么,我需要在域服务上创建接口吗?请注意,我已经为应用程序服务定义了接口。为什么要寻找原因?一旦发现需要接口,就可以随时提取它 接口可能会帮助您进行更细粒度的测试,但如果您不需要它,就不要创建它。@JefClaes,就是这样。我认为(可能没有实现)域服务接口对粒度测试也没有帮助,因为域服务的实现是具体的。换句话说,不应交换域服

我将DDD用于通过3个不同的应用程序(工作流)服务使用相同域层(域服务)的3个应用程序。基础架构和UI层无法访问域服务。我还通过域服务构造函数传递所有外部依赖项,如存储库。那么,我需要在域服务上创建接口吗?请注意,我已经为应用程序服务定义了接口。

为什么要寻找原因?一旦发现需要接口,就可以随时提取它

接口可能会帮助您进行更细粒度的测试,但如果您不需要它,就不要创建它。@JefClaes,就是这样。我认为(可能没有实现)域服务接口对粒度测试也没有帮助,因为域服务的实现是具体的。换句话说,不应交换域服务业务逻辑。不仅如此,我看到在应用程序服务上创建接口的唯一原因是在控制器上创建单元测试时对其进行模拟(如果我们这样做了!!)。如果有人能给我一个为服务创建接口的理由,我将不胜感激。我想你已经介绍了两个主要原因,如果你对一个接口进行编码并使用DI,你可以将该类换成另一个类,减少依赖性,从而使单元测试成为可能/更容易。@ParthPatel你为什么要寻找理由?一旦你发现需要一个接口,你总是可以提取它。你是对的。实际上,我这样想是因为我自己的对象工厂类有一个自动检测对象构造函数的参数类型的限制,并且无法从已注册的依赖项中解析它。我用StructureMap替换了factory类,现在一切正常了。:-)这改变了我对DI的思考方式。