Получить доступ

Что означает принцип DRY?

JuniorПринципы проектирования
Ещё спрашивают так:
  • Что такое DRY, KISS и YAGNI?
  • Всегда ли нужно убирать дублирование кода?
  • Что именно запрещает дублировать принцип DRY в его оригинальной формулировке?
Коротко

DRY — Don't Repeat Yourself: каждое знание (правило, расчёт) должно быть записано в одном месте.

  • Смысл — стоимость изменения: правка в одном месте, а не в трёх
  • Речь о знании, а не о похожем тексте: совпадающий код с разными причинами изменений не объединяют

А ещё Рядом — KISS (делай просто) и YAGNI (не пиши то, что пока не нужно)

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

DRY сформулирован в книге «Программист-прагматик»: у каждого куска знания в системе должно быть одно авторитетное представление. Если правило «скидка 10 % от 5000 ₽» записано в трёх местах, при изменении легко обновить два и забыть третье — получится расхождение.

Важная тонкость: DRY — не про похожий текст. Два одинаковых фрагмента, которые меняются по разным причинам (валидация email в регистрации и в рассылке с разными требованиями в будущем), объединять не стоит. Преждевременное «вынесение в общий метод» склеивает независимые вещи и потом обрастает флагами и условиями. Есть встречное правило «трёх раз»: обобщать, когда повторение встретилось третий раз и смысл совпадает.

Связанные принципы:

  • KISS (Keep It Simple) — простое решение лучше хитрого;
  • YAGNI (You Aren't Gonna Need It) — не писать функциональность «на будущее», пока она не нужна.

Что хотят услышать

  • Расшифровка и смысл: одно место для каждого знания.
  • Связь со стоимостью изменений.
  • Различие между дублированием знания и случайным совпадением кода.
  • KISS и YAGNI — плюс.

Частые ошибки

  • Применять принцип механически по внешнему сходству кода.
  • Считать любое дублирование ошибкой.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Don't Repeat Yourself — одно и то же знание не должно дублироваться в нескольких местах
  • ✗Do Rewrite Yearly — код следует полностью переписывать раз в год
  • ✗Data Redundancy Yield — данные нужно дублировать для надёжности
  • ✗Deploy Rapidly Yourself — выкатывать изменения нужно как можно чаще

Что спросят дальше

  • Что такое случайное дублирование?
  • Что утверждают принципы KISS и YAGNI?
  • Почему «дублирование дешевле неправильной абстракции»?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем