Ответ вслух Junior SOLID и принципы обновлено

DRY, KISS, YAGNI

Вопрос

Что значат DRY, KISS, YAGNI и где они противоречат друг другу?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

DRY - не дублируй знание, а не текст. Два куска похожего кода, которые меняются по разным причинам, дублированием не являются.

Что должно прозвучать в ответе

  • DRY - не повторяй знание, а не просто одинаковые строки

  • KISS - простое решение предпочтительнее хитрого

  • YAGNI - не пиши то, что понадобится «потом»

  • DRY напрямую конфликтует с KISS при ранней абстракции

  • правило трёх: обобщать на третьем повторении

  • ложный DRY: объединили похожее, а меняется оно по-разному

Что могут спросить следом

  • Приведи пример, где дублирование лучше абстракции
  • Как понять, что абстракция преждевременна
  • Что делать, если ложный DRY уже в проде

Разбор

DRY - не дублируй знание, а не текст. Два куска похожего кода, которые меняются по разным причинам, дублированием не являются.

KISS - из двух работающих решений берём то, что проще читается. YAGNI - не закладывай расширяемость под задачу, которой нет в требованиях.

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

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

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.