Ответ
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:
- Если абстракция усложнит понимание кода
- Для одноразовой или тривиальной логики
- Когда две похожие части кода могут эволюционировать в разных направлениях
Видео-ответы
▶
Как нужно проходить собеседование по Python, чтобы получить оффер!
▶
Собеседование в МТС: Middle Java разработчик не справился!
▶
Сеньор хочет стать миддлом??? / Техсобес Senior QA Auto на позицию Middle Python Developer
▶
Чего крепкому Middle-разработчику не хватает до Senior? / Техсобес на позицию Middle Python Dev
▶
Очень сильный Middle в 22 года?? / Техсобес студента на позицию Middle Python Developer
▶
ПРОВАЛИЛ СОБЕС. Frontend ЗП 180к. REACT LIVE CODING
▶
Собеседование на Middle PHP разработчика (офер получен)
▶
#1 Cобеседование Middle Frontend разработчика
▶
#3. Java-Mentor: Мидл без опыта. Выпускник JM + School21 Frontend Dev. Публичное собеседование.
▶
Джун-самоучка получил оффер всего за день? / Техсобес Junior Python Developer / Mock interview
▶
Тестовое интервью Тани на позицию Junior Python-разработчик
▶
Техническое собеседование с подписчиком на frontend intern/junior: JS, React, Next, HTML, CSS, REST
▶
Frontend собеседование. Пятеро на одного. Устоял или сдался?
▶
САМОЕ ЖЕСТКОЕ СОБЕСЕДОВАНИЕ JUNIOR REACT
▶
Гриша Скобелев, Артур Власов: Публичное собеседование Junior Software Engineer
▶
Тестовое собеседование на позицию PHP-разработчика
▶
Собеседование Junior Python Developer
▶
Собеседование на позицию Java junior #1 Антон
▶
Капкаев Андрей. Junior Python developer собеседование
▶
Публичное собеседование: PHP-программист [Хекслет]
▶
Реальное собеседование Junior Android разработчика. Денис Бекк / Мобильный разработчик