用于用例的接口(应用程序服务)?

7
在遵循DDD原则并使用六边形架构时,用例或应用服务是否应该具有接口和实现?例如,用例“删除视频”,它应该有IDeleVideo(接口)和DeletVideoImpl(实现)来实现该接口吗?
如果答案是肯定的,那么用例接口应该在领域层还是应用层中?显然,实现应该始终位于应用程序层。
我认为用例不是经常变化的东西,所以我认为没有必要有一个接口,只有实现就足够了。但是,在六边形架构和DDD原则方面,是否有相关规定?
提前致谢。

一个很好的问题!但为什么显然实现应该始终在应用层呢? - PajuranCodes
4个回答

8
我认为你的应用程序服务不需要接口。因为它们通常编排特定的应用程序用例,不应该有相同类型工作流程的不同实现。此外,它们不应该具有基础架构的依赖性,而应通过调用存储库、领域服务或聚合的操作来编排需要发生的操作工作流程。
更重要的是,确保你的应用程序服务只访问接口而不是依赖于基础架构的具体实现。这意味着应用程序服务只应依赖于接口以使用访问其他基础架构的存储库或组件(例如,向外部系统发出请求的服务组件)。
然而,如果您的应用程序服务(或用例)需要接口,则应在应用层中定义这些接口。这与领域接口(例如存储库接口)所在的领域层相同。

5
在遵循六边形架构和领域驱动设计原则的情况下,使用用例或应用程序服务时是否需要接口和实现?
简而言之,通常情况下,您不需要在用例(也称为Clean Architecture中的交互器)上使用接口,因为您的主要适配器(六边形的客户端)天然依赖于六边形。但是请注意,当创建一个次要适配器(由用例使用的外部组件)时,仍然需要它,因为您的六边形绝不能依赖于任何次要适配器。
但是,如果满足以下条件,则可能仍需要用例接口:
1. 您希望能够对主适配器进行单元测试(尽管被认为是谦虚对象),其中您将通过其接口存根/模拟您的用例。 2. 您可能想尝试几种用例替代方案以进行实验,在这种情况下,它将充当有意义的抽象。
如果答案是肯定的,请问用例接口应放在哪里?在域层还是在应用层?
应将其放置在六边形内,在应用程序层级别,因为每个接口都定义了一个应用程序服务。

2
我也有同样的想法。由于每个应用服务只有一个用例,因此您不需要拥有接口。这来自我与不同团队的实践,在这些团队中,我们仅针对一个实现没有接口。此外,如果您有应用程序服务接口,则应将其定义在应用程序层中。但我也见过它们在基础设施层中出现。

1

使用六边形架构实现领域驱动设计时,应用服务的接口是驱动端口(用例边界,六边形的左侧边缘)。

六边形内部分为两部分:应用服务实现和领域。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接