Node.js 控制器是在应用层还是在基础结构层?我甚至应该在干净的体系结构中使用控制器吗?

Node.js 控制器是在应用层还是在基础结构层?我甚至应该在干净的体系结构中使用控制器吗?,node.js,express,domain-driven-design,clean-architecture,Node.js,Express,Domain Driven Design,Clean Architecture,据我所知,Clean Architecture/DDD声明您的用例可以由任何东西触发,让它成为HTTP请求或GUI,对吗 我正试图模仿这一点,但我不确定我是否做得正确 在我的基础设施文件夹中,我有路由器。例如: import express from 'express' import UserController from '../controllers/user_controller.js' import ExpressRouterAdapter from './ExpressRouterAd

据我所知,Clean Architecture/DDD声明您的用例可以由任何东西触发,让它成为HTTP请求或GUI,对吗

我正试图模仿这一点,但我不确定我是否做得正确

在我的基础设施文件夹中,我有路由器。例如:

import express from 'express'
import UserController from '../controllers/user_controller.js'
import ExpressRouterAdapter from './ExpressRouterAdapter.js'

export default function UsersRouter () {
  const router = express.Router()

  router.route('/:username').get(ExpressRouterAdapter.adapt(UserController.getUser))

  return router
}
ExpressRouterAdapter只是一个将Express请求转换为简单httpRequest JS对象的适配器

这是我的GetUser控制器:

导出类GetUser{ 构造函数{FindUserService}{ this.findUser=FindUserService } 异步句柄httpRequest={}{ 试一试{ const{username}=httpRequest.params 如果!用户名{ 返回{ 状态代码:400, 正文:“缺少用户名参数。” } } const user=等待this.findUser.executeusername // ... 我有几个问题:

我是否应该有控制器?路由器是否应该直接将其指向用例/服务? ^^我问这个问题的原因是因为我的控制器实际上是以HTTP为中心的。例如,其中一些控制器被称为:postaser、GetUser、DeleteUser。所以我猜它们应该在infrastructure文件夹中,对吗?
我猜只有当您的交付机制是web应用程序时才使用控制器,对吗?

您是对的。DDD与上下文和语言无关,但对于干净的体系结构、端口和适配器,这才是正确的想法

通常,您的结构如下所示:


因此,您的应用程序公开了一个表示端口的API,您可以连接实现不同类型的物理交付协议的不同边缘组件来与您的应用程序通信。

没错。DDD与上下文和语言无关,而是用于干净的体系结构、端口和适应这是正确的想法

通常,您的结构如下所示:


因此,您的应用程序公开了一个表示端口的API,您可以连接实现不同类型的物理交付协议的不同边缘组件来与您的应用程序进行通信。

太棒了,非常感谢您的澄清。所以控制器只是适配器,端口就是用例,对吗?所以没有问题是控制器要像我在上面做的那样显式地接收HTTP请求?谢谢,而且,控制器也是演示者,对吗?因为它们发送请求并返回itA演示者直接与视图一起工作。控制器只返回模型。但是,它不在这个问题的范围内。太棒了,非常感谢您的澄清初始化。所以控制器只是适配器,端口就是用例,对吗?所以控制器可以像我在上面做的那样显式地接收HTTP请求吗?谢谢,而且,控制器也是演示者,对吧?因为它们发送请求并返回itA演示者直接与视图一起工作。控制器仅在转换模型。但是,它不在这个问题的范围之内。