Domain driven design 用例接口(应用程序服务)?

Domain driven design 用例接口(应用程序服务)?,domain-driven-design,use-case,hexagonal-architecture,Domain Driven Design,Use Case,Hexagonal Architecture,当遵循具有ddd原则的六边形体系结构时,用例或应用程序服务是否应该具有接口和实现?例如,用例“删除一个视频”,它是否应该有IDeteVideo(接口)和DeletVideoImpl(实现)来实现该接口 如果答案是肯定的,用例的接口应该在哪里,在域层还是在应用层?很明显,实现应该始终在应用程序层 我认为用例不是经常变化的,所以在我看来,没有必要有一个接口,有了实现就足够了。但在六边形架构和DDD原则方面,是否对此进行了说明 提前感谢。当使用hex arch实现DDD时,应用程序服务的接口是驱动程序

当遵循具有ddd原则的六边形体系结构时,用例或应用程序服务是否应该具有接口和实现?例如,用例“删除一个视频”,它是否应该有IDeteVideo(接口)和DeletVideoImpl(实现)来实现该接口

如果答案是肯定的,用例的接口应该在哪里,在域层还是在应用层?很明显,实现应该始终在应用程序层

我认为用例不是经常变化的,所以在我看来,没有必要有一个接口,有了实现就足够了。但在六边形架构和DDD原则方面,是否对此进行了说明


提前感谢。

当使用hex arch实现DDD时,应用程序服务的接口是驱动程序端口(用例边界,hex arch的左边缘)

六边形的内部分为两部分:应用程序服务实现和域

用例或应用程序服务是否应该具有接口和 使用ddd遵循六边形体系结构时的实现 原则

简而言之,您通常不需要用例上的接口(在干净的体系结构中也称为交互器),因为您的主适配器(hexagone的客户端)本质上依赖于hexagone

请注意,在制作辅助适配器(用例使用的外部组件)时,您仍然需要它,因为您的hexagone不能依赖任何辅助适配器

但是,在以下情况下,您可能仍然需要用例上的接口:

  • 您希望能够单元测试您的主要适配器(尽管被认为是谦逊的对象),在这里您可以通过接口存根/模拟您的用例

  • 为了进行实验,您可能想尝试几个用例的替代方案,在这种情况下,它将充当一个有意义的抽象

如果答案是肯定的,用例的接口应该在哪里?是在域层还是在应用层


它应该放在应用层的hexagone中,因为每个接口都定义了一个应用程序服务。

我认为没有必要为应用程序服务提供接口。由于它们通常协调特定的应用程序用例,因此同一类型的工作流不应该有不同的实现。此外,它们不应该依赖于基础设施本身,而是通过调用存储库、域服务或聚合上的操作来协调需要执行的操作的工作流

更重要的是确保您的应用程序服务只访问接口,而不是依赖于基础架构的具体实现。这意味着应用程序服务应该只依赖于接口来使用存储库或访问其他基础设施的组件(例如,向外部系统发出请求的服务组件)


但是,如果您的应用程序服务(或用例)有接口,那么这些接口应该在应用程序层中定义。这与应该位于域层的域接口(例如存储库接口)的规则相同。

我也在考虑同样的规则。因为每个应用程序服务只有一个用例,所以不需要接口。这来自于我在不同团队的实践,在这些团队中,我们没有一个只用于一个实现的接口。此外,我同意应用程序服务接口(如果您有)应该在应用程序层中定义。
但我也在基础架构层看到了它们。

这是一个很好的问题!但是为什么很明显,实现应该始终在应用程序层?