Что означает принцип DRY?
- Что такое DRY, KISS и YAGNI?
- Всегда ли нужно убирать дублирование кода?
- Что именно запрещает дублировать принцип DRY в его оригинальной формулировке?
DRY — Don't Repeat Yourself: каждое знание (правило, расчёт) должно быть записано в одном месте.
- Смысл — стоимость изменения: правка в одном месте, а не в трёх
- Речь о знании, а не о похожем тексте: совпадающий код с разными причинами изменений не объединяют
А ещё Рядом — KISS (делай просто) и YAGNI (не пиши то, что пока не нужно)
Подробно
DRY сформулирован в книге «Программист-прагматик»: у каждого куска знания в системе должно быть одно авторитетное представление. Если правило «скидка 10 % от 5000 ₽» записано в трёх местах, при изменении легко обновить два и забыть третье — получится расхождение.
Важная тонкость: DRY — не про похожий текст. Два одинаковых фрагмента, которые меняются по разным причинам (валидация email в регистрации и в рассылке с разными требованиями в будущем), объединять не стоит. Преждевременное «вынесение в общий метод» склеивает независимые вещи и потом обрастает флагами и условиями. Есть встречное правило «трёх раз»: обобщать, когда повторение встретилось третий раз и смысл совпадает.
Связанные принципы:
- KISS (Keep It Simple) — простое решение лучше хитрого;
- YAGNI (You Aren't Gonna Need It) — не писать функциональность «на будущее», пока она не нужна.
Что хотят услышать
- Расшифровка и смысл: одно место для каждого знания.
- Связь со стоимостью изменений.
- Различие между дублированием знания и случайным совпадением кода.
- KISS и YAGNI — плюс.
Частые ошибки
- Применять принцип механически по внешнему сходству кода.
- Считать любое дублирование ошибкой.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Do Rewrite Yearly — код следует полностью переписывать раз в год
- ✓Don't Repeat Yourself — знание не дублируется в коде
- ✗Data Redundancy Yield — данные нужно дублировать для надёжности
- ✗Deploy Rapidly Yourself — выкатывать изменения нужно как можно чаще
Что спросят дальше
- Что такое случайное дублирование?
- Что утверждают принципы KISS и YAGNI?
- Почему «дублирование дешевле неправильной абстракции»?
Разбор темы
- DRY, KISS, YAGNI и качество связей
Дублирование знания против дублирования текста, цена преждевременной абстракции, связность и связанность, закон Деметры, каталог code smells и когда рефакторить.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.