PassFront
  1. PassFront
  2. База знаний
  3. Смежные принципы проектирования

Что означают DRY, KISS и YAGNI и как они конфликтуют между собой?

Смежные принципы проектирования

DRY — у каждого знания одно авторитетное представление; KISS — выбирай простейшее работающее решение; YAGNI — не пиши то, что понадобится «когда-нибудь». По отдельности полезны, но тянут в разные стороны.

Точные смыслы

  • DRY (Хант и Томас, «Программист-прагматик», 1999) — про знание, а не совпадающие строки. Две проверки age >= 18 для совершеннолетия и для скидки — разные правила, хоть и одинаковы текстом.
  • KISS — связывают с Келли Джонсоном из Lockheed Skunk Works: самолёт должен чинить средний механик в полевых условиях.
  • YAGNI — из экстремального программирования: фича стоит не только написания, но и сопровождения, а будущее угадывают редко.

Где конфликтуют

  • DRY vs KISS: устранение повтора рождает обобщённую функцию с флагами и колбэками — сложнее двух копий.
  • DRY vs YAGNI: абстракцию выделяют по двум совпадениям, ещё не видя третьего варианта.
  • YAGNI vs OCP: точки расширения «заранее» — ровно то, что YAGNI запрещает.
  • KISS vs производительность: простой проход O(n²) против индекса со сложной инвалидацией.

Как разрешать

Правило трёх: повтор терпят до третьего случая. KISS и YAGNI — по умолчанию; DRY обязателен для правил, которые должны меняться синхронно, например валидации на клиенте и сервере.

Коротко для собеседования

DRY убирает дублирование знаний, KISS — лишнюю сложность, YAGNI — спекулятивные фичи, и крайность одного бьёт по другому. Практическое правило — терпеть повтор до третьего случая, но синхронные правила вроде валидации на клиенте и сервере держать в одном месте.

Другие вопросы раздела