PRO

Что такое DRY, KISS, YAGNI?

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

DRY — Don't Repeat Yourself

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

def calculate_discount(price: float, percent: int) -> float:
    return price * (1 - percent / 100)

Важно не доводить DRY до крайности: два похожих фрагмента кода не всегда стоит объединять. Преждевременная абстракция может сделать код менее понятным, чем небольшое осмысленное дублирование.

KISS — Keep It Simple

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

Например, для небольшого CRUD-приложения не обязательно сразу внедрять микросервисы, event sourcing, несколько брокеров сообщений и сложную иерархию классов.

YAGNI — You Aren't Gonna Need It

YAGNI означает: не нужно разрабатывать функцию только потому, что она может пригодиться когда-нибудь. Функциональность добавляют, когда есть реальное требование, подтверждённый сценарий или измеренная проблема.

Например, не стоит заранее создавать универсальную систему плагинов для одного интеграционного сценария, если второй сценарий пока не существует.

Как применять вместе

  • DRY — не дублировать бизнес-знание и правила;

  • KISS — не усложнять решение сверх необходимости;

  • YAGNI — не строить предположения о будущих требованиях как готовый код.

Как ответить на собеседовании

DRY говорит, что одно правило должно иметь один источник истины. KISS предлагает выбирать самое простое решение, которое решает задачу. YAGNI напоминает не реализовывать гипотетические возможности заранее. Я применяю эти принципы вместе, чтобы не плодить дублирование и при этом не создавать преждевременные абстракции.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге