Что такое DRY принцип
Что проверяют
Понимаете ли вы, что DRY про знание, а не про одинаковые строки, и умеете ли вовремя остановиться. Следом обычно спрашивают, когда дублирование лучше абстракции, или просят найти нарушение DRY в куске кода.
Как отвечать
Формулировка из книги «The Pragmatic Programmer» (Хант и Томас, 1999): каждое знание должно иметь в системе одно однозначное и авторитетное представление. Речь о бизнес-правиле, формате, константе, а не о совпадающем тексте. Если два куска кода похожи, но меняются по разным причинам, это не дублирование.
Во фронтенде это выглядит так:
- дизайн-токены: цвета, отступы и радиусы живут в CSS-переменных или теме, а не десятками
#1677ffпо стилям; - схема валидации: одна схема
zodпроверяет форму и даёт тип черезz.infer, без отдельного интерфейса рядом; - типы API: генерируются из OpenAPI-схемы (например,
openapi-typescript), а не пишутся руками параллельно бэкенду; - повторяющаяся логика: уходит в кастомный хук, разметка в компонент, адреса роутов и ключи запросов в константы;
- конфигурация: один источник для env-переменных и фича-флагов.
Затем покажите границы. Преждевременная абстракция опаснее копии: Сэнди Метц формулирует это как «дублирование намного дешевле неправильной абстракции». Отсюда правило трёх (выносить общее, когда случай повторился в третий раз) и подход AHA от Кента Доддса. Хорошо, если приведёте свой пример, когда общую абстракцию пришлось разбирать обратно.
Где спотыкаются
Склеивают две похожие карточки в один компонент, а через месяц у него пятнадцать булевых пропсов вроде isCompact, hideAvatar, withBadge, и любая правка ломает соседний экран.
Тянут общую утилиту между независимыми модулями или микрофронтендами. Выигрыш в десяти строках оборачивается связностью: один пакет теперь нельзя обновить без другого.
Применяют DRY к тестам. В тесте важнее, чтобы сценарий читался целиком, чем вынос всего в хелперы, из-за которых непонятно, что вообще проверяется.