Таким образом, ответ зависит от стиля кода.У Javascript есть много способов структурировать код.Ваш первый вариант ближе к функциональному стилю, использующему функцию стрелки, второй использует настройку класса, представленную в ES2015.
Однако, только первый фактически создает маршрутизатор.Поэтому вам все еще нужен код для сопоставления ваших статических методов в TodoService с URL-адресами.
Разработчики, пришедшие с Java, обнаружат, что ваш код на основе классов будет легче следовать.Людям, имеющим опыт работы с небольшими сервисами в экспрессе, может быть легче следовать первому примеру.
Мое личное предпочтение как разработчика состоит в том, чтобы максимально упростить сопоставление вызовов API в журналах с кодом.Одна из вещей, которые мне нравятся в экспрессе, это то, насколько это легко с помощью вложенных маршрутизаторов и промежуточного программного обеспечения.
Так что для меня ваш первый близок.У меня просто не было бы анонимных функций.Вместо этого эти функции должны быть во внешнем файле, возможно, routes.js
, и настроены так, чтобы вы могли легко их тестировать.
например
rout.js
function makeTaskRoute = function(TodoService) {
return async getTasks(req, res, next) => {
const results = await TodoService.getTasks();
return res.status(201).json(results);
}
}
module.exports = {
makeTaskRoute
}
Затем в index.js
const TodoService = require('todo/service/TodoService.js');
const getTasks = require('./routes/routes.js').makeTaskRoute(TodoService);
const router = express.Router()
router.get('/tasks', getTasks);
Это более функциональный стиль, но он также позволяет внедрять зависимости и легко тестировать.
Еще многое нужно сделать, чтобы сделать это чище, и многое - это предпочтения.Но я обнаружил, что это (плюс использование объявленных типов в машинописи и четкое разделение структур данных и мутаций) является чистым, легким для чтения, простым в обслуживании и улучшении.