用例接口(应用服务)?

Mr.*_*ars 5 domain-driven-design use-case hexagonal-architecture

在遵循具有 ddd 原则的六边形架构时,用例或应用程序服务是否应该具有接口和实现?例如,用例“删除视频”,是否应该让 IDeteVideo(接口)和 DeletVideoImpl(实现)实现该接口?

如果答案是肯定的,那么用例的接口应该在哪里,在领域层还是在应用层?很明显,实现应该总是在应用层。

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

提前致谢。

afh*_*afh 6

我认为不需要为您的应用程序服务提供接口。由于他们通常会编排特定的应用程序用例,因此不应有相同类型工作流的不同实现。此外,它们不应依赖于基础设施本身,而应通过调用存储库、域服务或聚合上的操作来编排需要发生的操作的工作流。

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

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


Mik*_*378 5

在遵循具有 ddd 原则的六边形架构时,用例或应用程序服务是否应该具有接口和实现?

简而言之,您通常不需要用例上的接口(在 Clean Architecture 中也称为交互器),因为您的主要适配器(六边形的客户端)本质上依赖于六边形。

请注意,尽管在制作辅助设备时您仍然需要它适配器(您的用例使用的外部组件),因为您的六边形不得依赖于任何辅助适配器。

但是,如果出现以下情况,您的用例可能仍然需要一个接口:

  • 您希望能够对您的主要适配器进行单元测试(尽管被视为不起眼的对象),您可以在其中通过其接口存根/模拟您的用例。

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

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

它应该放在六边形内部,在应用层级别,因为每个接口都定义了一个应用程序服务。