Перейти к содержанию
Innovialabs

DRY, KISS и YAGNI: принципы программирования простыми словами

Основы3 мин

Коротко

DRY — одно знание в одном месте, KISS — самое простое рабочее решение, YAGNI — не писать то, что пока не нужно; применять их стоит вместе, а не по отдельности.

Коротко о трёх принципах

  • DRY (Don't Repeat Yourself) — каждое знание о системе должно жить в одном месте. Речь о правилах и решениях, а не о совпадающих строках.
  • KISS (Keep It Simple, Stupid) — выбирайте самое простое решение, которое работает. Простой код легче читать, тестировать и менять.
  • YAGNI (You Aren't Gonna Need It) — не пишите функциональность «на будущее», пока она реально не понадобилась.

Все три борются с одним врагом — лишней сложностью, но с разных сторон.

DRY на примере

Правило «бесплатная доставка от определённой суммы» встречается в корзине, в письме клиенту и в админке. Если сумма прописана в трёх местах, при изменении условия одно место обязательно забудут.

// одно место для правила
export const FREE_SHIPPING_THRESHOLD = 500_000;

export function hasFreeShipping(total) {
  return total >= FREE_SHIPPING_THRESHOLD;
}

Теперь корзина, письмо и админка вызывают одну функцию.

Когда DRY вредит

Опасность — объединять код, который похож только внешне. Две функции валидации — для регистрации и для оформления заказа — сегодня проверяют одни и те же поля. Вы делаете общую validateUser(). Через месяц для заказа нужен адрес, а для регистрации — нет. Появляется флаг. Потом второй. Функция обрастает условиями, и любая правка рискует сломать оба сценария.

Это называется неверная абстракция. Признаки:

  • у общей функции растёт число булевых параметров;
  • внутри много if в зависимости от того, кто вызывает;
  • изменение для одного места требует проверки всех остальных.

Практичное правило: допустите дублирование, пока не увидите третий похожий случай и не поймёте, что это действительно одно знание. Если абстракция уже ошибочна — не бойтесь вернуть копии и разделить код заново.

KISS на практике

  • Обычный цикл понятнее цепочки из пяти хитрых операций, если команда так читает быстрее.
  • Отдельный сервис, очередь или кэш добавляйте, когда есть конкретная проблема, а не «потому что так делают крупные компании».
  • Понятное имя переменной часто заменяет комментарий.

Простота — не примитивность. Простое решение может требовать больше обдумывания, но оставляет меньше движущихся частей.

YAGNI на практике

Типичные нарушения:

  • универсальная система плагинов для приложения, у которого нет ни одного плагина;
  • поддержка нескольких баз данных, когда используется одна;
  • настройки для параметров, которые никто никогда не менял.

Каждая такая «заготовка» стоит времени сейчас и мешает потом: её нужно поддерживать, тестировать и обходить. Когда потребность появится, вы будете знать реальные требования и сделаете точнее.

YAGNI не отменяет хорошей структуры: чистый, покрытый тестами код легко расширить, когда придёт время.

Как принципы уравновешивают друг друга

СитуацияЧто подсказывает принцип
Одно бизнес-правило в трёх местахDRY: вынести в одно место
Общая функция обросла флагамиKISS: разделить обратно на простые
Хочется абстракцию «на вырост»YAGNI: подождать реальной потребности
Простое решение дублирует кодОценить: одно ли это знание

Если DRY толкает к сложной абстракции, KISS и YAGNI её сдерживают. Если KISS превращается в копипасту одного правила, DRY напоминает о цене рассинхронизации.

Частые вопросы

Нет. DRY касается знаний, а не текста. Два одинаковых фрагмента, которые меняются по разным причинам, лучше оставить раздельными.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.