在Clean Architecture中,“用例交互器”和“服务”的区别是什么?

19

我不太明白在Clean Architecture中用例交互器(Use Case Interactor)服务(Service)之间的区别。领域服务是不是仅仅由“用例交互器方法”组成的集合?

我想在我的ASP.net Core应用程序中实现Clean Architecture,但我不确定应该按照“用例交互器”的方式实现(https://fullstackmark.com/post/18/building-aspnet-core-web-apis-with-clean-architecture),还是按照“服务”的方式实现(https://github.com/ardalis/CleanArchitecture),或者是否应该将它们结合起来(如果可能的话)。


2
在领域驱动设计中,有几种类型的服务和层。有负责业务逻辑的领域层和负责操作业务规则和实体的领域服务。应用服务实现用例,并与领域服务密切合作。软件的另一部分,如基础设施层,则与您的应用程序服务一起工作。 - grinay
这与什么相关:服务层 - Mahozad
1个回答

13

严格来说,“Domain Service”一词不存在于Uncle Bob的Clean Architecture中,而是存在于DDD中。在干净架构中,所有业务逻辑都放在用例交互器和实体中。因此,如果您想严格遵循Uncle Bob的架构,请按照您链接的第一篇文章中描述的Use Case Interactors的方式进行。

有关用例和用例交互器的详细讨论,请参阅我的文章:http://www.plainionist.net/Implementing-Clean-Architecture-UseCases/


哦,你采取的方法非常有趣。你对只有一个用例交互器使用服务的想法有什么看法?因为在我的脑海中,用例交互器与服务是不同的东西。用例交互器处理完成用例所需的过程,而服务负责完成简单任务,无论哪个交互器调用它。我看到你为一个用例创建了多个交互器(实际上,我所说的“服务”和你所说的“子交互器”之间的区别只在于名称)。你认为我的方法是否也符合CA的要求? - Christoph Hummler
正如你已经指出的那样:区别只在于名称;-)因此,如果你想给完成简单任务的类一个不同的名称:请继续。我认为这仍然符合干净架构的原则。如果涉及核心业务逻辑而不是用例和应用程序特定的功能,你可以考虑将一些服务功能放入实体中。 - plainionist
2
好的,谢谢你提醒将一些服务功能放入实体中。这是一个很好的建议。 - Christoph Hummler

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