Sobes.tech
Назад к вопросам
Junior — Middle
89

Можете ли вы объяснить суть принципа избегания повторного кода в разработке программ?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Принцип избегания повторного кода означает, что одну и ту же логику не стоит копировать в разные места программы. Вместо этого её выносят в отдельную функцию, модуль или слой абстракции. Это упрощает поддержку, уменьшает число ошибок и ускоряет изменения.

Определение:

Избегание повторного кода — это практика, при которой общая логика создаётся один раз и используется повторно. Если одинаковый фрагмент начинает встречаться в нескольких местах, его обычно выносят в переиспользуемую сущность: функцию, класс, helper, middleware, сервис или модуль. В Node.js это особенно важно, потому что проект часто состоит из множества небольших файлов и слоёв.

Пример использования:

Допустим, в приложении несколько обработчиков API проверяют формат email одинаковым образом. Вместо копирования проверки в каждый обработчик лучше вынести её в отдельную функцию и вызывать в нужных местах.

function isValidEmail(email) {
  return typeof email === 'string' && email.includes('@');
}

function registerUser(req, res) {
  const { email } = req.body;

  if (!isValidEmail(email)) {
    return res.status(400).send('Некорректный email');
  }

  res.send('Пользователь зарегистрирован');
}

function updateUser(req, res) {
  const { email } = req.body;

  if (!isValidEmail(email)) {
    return res.status(400).send('Некорректный email');
  }

  res.send('Пользователь обновлён');
}

Пояснение кода:

Здесь логика проверки email написана один раз в функции isValidEmail. Обработчики registerUser и updateUser переиспользуют эту функцию вместо дублирования условий. Если правило проверки изменится, достаточно исправить только одно место.

Ключевые моменты:

  • Повторный код усложняет поддержку: исправления приходится вносить в несколько мест.
  • Вынос общей логики снижает риск расхождения поведения в разных частях программы.
  • В Node.js повторяемость обычно устраняют через функции, модули, middleware и сервисы.
  • Не стоит преждевременно абстрагировать всё подряд: переиспользование должно реально упрощать код.
  • Хороший ориентир: если одинаковый фрагмент появляется несколько раз, его стоит вынести.