#javascript #node.js #express #server #architecture
Вопрос:
Я пытаюсь изучить хорошую архитектуру для сервера узлов, но есть кое-что, что меня беспокоит, в моей попытке создать 3-х уровневый дизайн я прихожу к такой структуре папок:
server/
--|api/v1/vacancies.js
--|config/db/index.js
--|services/vacanciesService.js
--|models/vacanciesData.js
и вот какой-то код:
vacancies.js
router.get("/:id", () => service.getById());
router.delete("/:id", () => service.deleteById());
router.patch("/:id", () => service.updateById());
router.post("/", () => service.create());
vacanciesService.js
const getById = () => {};
const create = () => {};
const updateById = () => {};
const deleteById = () => {};
module.exports = {
get,
getById,
create,
updateById,
deleteById,
};
vacanciesData.js
const db = require("../config/db");
...
module.exports = {
get,
getById,
create,
updateById,
deleteById,
};
в основном я повторяю эти 5 методов на протяжении всего приложения, но я чувствую запах, пожалуйста, помогите мне, что мне делать?
Комментарии:
1. Повторяется ли какой-либо код или просто одни и те же строительные леса, но разные коды в каждой реализации?
2. код другой, специфичный для определенного слоя, но эти строительные леса такие уродливые
3. Вероятно, вы можете поместить строительные леса в базовый класс, а затем сделать каждую реализацию подклассом, а затем поместить некоторые функции строительных лесов, совместно используемые в базовом классе. Нам было бы полезно увидеть 2 или 3 фактические реализации, чтобы предложить более подробную информацию.
Ответ №1:
В этом нет ничего плохого, если вам нужна гибкость. API может развиваться независимо от уровня обслуживания и наоборот, и именно тогда вы пожнете плоды.
Если вам кажется, что это слишком тяжело, то, возможно, ваше приложение слишком простое, чтобы оправдать такое расслоение, и вы могли бы объединить обязанности, например, удалить уровень сервиса и объединить его со слоем API. Архитектуры не являются универсальными для всех, все дело в том, чтобы найти правильный баланс для создаваемой вами системы.
Простые приложения CRUD, скорее всего, не сильно выиграют от такого наслоения, но в то же время то, что начинается как простое приложение CRUD, может превратиться во что-то достаточно сложное, что гарантирует такую архитектуру, и тогда вам придется проявить строгость для рефакторинга.