【发布时间】:2020-06-16 07:11:35
【问题描述】:
据我所知,Clean Architecture/DDD 声明您的用例可以由任何东西触发,可以是 HTTP 请求或 GUI,对吗?
我正在尝试模仿这一点,但我不确定我是否做得正确。
在我的infrastructure 文件夹中,我有路由器。例如:
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 控制器:
export class GetUser {
constructor ({ FindUserService }) {
this.findUser = FindUserService
}
async handle (httpRequest = {}) {
try {
const { username } = httpRequest.params
if (!username) {
return {
statusCode: 400,
body: 'Missing username parameter.'
}
}
const user = await this.findUser.execute(username)
// ...
我有几个问题:
- 我应该有控制器吗?路由器是否应该直接将其定向到用例/服务?
- ^^ 我之所以这样问是因为我的控制器确实以 HTTP 为中心。例如其中一些被称为:
PostUser、GetUser、DeleteUser。所以我猜它们应该在infrastructure文件夹中,对吧?
我猜只有当你的交付机制是一个网络应用程序时才会使用控制器,对吧?
【问题讨论】:
标签: node.js express domain-driven-design clean-architecture