Что такое принцип DRY в разработке?

«Что такое принцип DRY в разработке?» — вопрос из категории Паттерны, который задают на 35% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DRY (Don't Repeat Yourself) — это фундаментальный принцип разработки программного обеспечения, направленный на устранение дублирования логики и данных. В контексте Node.js это означает вынос повторяющегося кода в отдельные функции, модули, утилиты или мидлвари.

Пример нарушения DRY в Node.js приложении:

// Повторение валидации в разных маршрутах
app.post('/api/users', (req, res) => {
  if (!req.body.email || !req.body.email.includes('@')) {
    return res.status(400).json({ error: 'Invalid email' });
  }
  // Создание пользователя
});

app.put('/api/users/:id', (req, res) => {
  if (!req.body.email || !req.body.email.includes('@')) {
    return res.status(400).json({ error: 'Invalid email' });
  }
  // Обновление пользователя
});

Пример применения DRY:

// Вынос валидации в отдельную функцию-мидлварь
const validateEmail = (req, res, next) => {
  if (!req.body.email || !req.body.email.includes('@')) {
    return res.status(400).json({ error: 'Invalid email' });
  }
  next();
};

// Использование в маршрутах
app.post('/api/users', validateEmail, userController.create);
app.put('/api/users/:id', validateEmail, userController.update);

// Или создание утилитарного модуля
// utils/validators.js
export const isValidEmail = (email) => {
  return email && email.includes('@') && email.length > 5;
};

Преимущества DRY в Node.js:

  • Упрощение поддержки: Изменения вносятся в одном месте
  • Снижение ошибок: Устраняется риск рассинхронизации дублированной логики
  • Улучшение тестирования: Легче покрыть тестами централизованный код
  • Повышение читаемости: Код становится более декларативным

Когда стоит отступить от DRY:

  • Если абстракция усложнит понимание кода
  • Для одноразовой или тривиальной логики
  • Когда две похожие части кода могут эволюционировать в разных направлениях

Видео-ответы