为什么控制器必须在 Clean Architecture 的用例上调用接口

Why controller has to call interface on use cases in Clean Architecture

在 Robert Martin 的干净架构书中,我认为 Controller 必须调用 UseCase 的接口。但是,既然所有的依赖都指向内部,也就是说 Adapter 层依赖于 Application 层,那为什么还需要一个接口呢?我应该可以直接新建Usecase

根据您的项目的大小和复杂性,在控制器中使用 new 创建用例交互器并直接使用实现会非常好。

但是使用接口(输入端口)有一些优点:

  • 测试:如果你想对你的控制器代码进行单元测试,一个接口将允许你模拟用例交互器
  • 依赖关系:如果你的用例交互器依赖于域服务或存储库,那么你想在你的 "main component" 中 "wire those up" 并通过接口(输入端口)将用例交互器传递给控制器

有关控制器和演示器的更深入讨论,请查看我的博客 post:http://www.plainionist.net/Implementing-Clean-Architecture-Controller-Presenter/