Как не повторять методы во всем серверном приложении?

#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, может превратиться во что-то достаточно сложное, что гарантирует такую архитектуру, и тогда вам придется проявить строгость для рефакторинга.