Насколько я понимаю, 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
, верно?
Я предполагаю, что контроллеры используются ТОЛЬКО, если ваш механизм доставки представляет собой веб-приложение, верно?