from '@koa/router';
export default function setupRoutes(config = {}) {
const router = new Router(config);
router.get('/', ctx => {
// ...
});
router.post('/users/:id', ctx => {
// ...
})
return router;
}
где-то снаружи вызывается эта setupRoutes и вернувшиеся роуты маунтятся на веб-сервер.
но вот как внутри эти роутов вызвать сервисы из сервисного слоя, при условии, что делать это надо через inversify? прокидывать container внутрь setupRoutes и уже там делать что-то типа такого?
import { TYPES } from '~/services';
export default function setupRoutes(container, config = {}) {
// ...
router.post('/users/:id', async ctx => {
const userData = ctx.body;
// validation here...
const usersService = container.get(TYPES.UsersService);
await usersService.createUser(userData);
// ...
})
return router;
}
Но ведь тогда di превращается в Service Locator, что как бы антипаттерн и такого же результата я могу достичь и без inversify.
Такой подход норм вообще? Или что-то всё-таки не так в моих размышлениях?
делают так: указывают в конструкторе (у тебя это setupRoutes) конкретные зависимости. * https://github.com/inversify/inversify-express-example/blob/master/Basic/controller/user.ts * https://dev.to/msplatam/how-to-use-inversifyjs-and-utils-with-nodejs-typescript-2pn еще есть чат про архитектуру — @oop_ru
Обсуждают сегодня