DRY / KISS / YAGNI
DRY — Don’t Repeat Yourself
Не повторяйся
Смысл
Любая логика, правило или данные должны быть описаны ровно один раз. Если одно и то же существует в нескольких местах — при изменении придётся обновлять все копии, и одна обязательно будет забыта.
Индикаторы нарушения
- Одинаковые или почти одинаковые блоки кода встречаются в разных местах
- Исправление бага требует правок в двух и более файлах
- Бизнес-правило описано «словами» в одном файле и «кодом» в другом
KISS — Keep It Simple, Stupid
Не усложняй
Смысл
Код должен быть настолько простым, насколько позволяет задача. Сложность — враг читаемости, тестируемости и поддержки. Если задача решается прямолинейно — решай прямолинейно, не вводи абстракции «на вырост».
Индикаторы нарушения
- Коллега не может понять функцию за 30 секунд
- Добавление простой фичи требует разбираться в трёх слоях абстракции
- В коде есть «хитрые» решения там, где хватило бы простого
if: вложенные тернарники, битовые операции, однострочный regex вместо читаемого кода
YAGNI — You Aren’t Gonna Need It
Тебе это не понадобится
Смысл
Не пиши код «на будущее». Реализуй только то, что нужно прямо сейчас. Преждевременные абстракции и «универсальные» решения усложняют кодовую базу и в большинстве случаев так и не используются.
Индикаторы нарушения
- В коде есть параметры, флаги или ветки которые нигде не вызываются
- Абстракция создана «потому что может пригодиться»
- Функция поддерживает пять режимов, но реально используется один
Шпаргалка по DRY / KISS / YAGNI
| Принцип | Вопрос для проверки |
|---|---|
| DRY | Изменение бизнес-правила затрагивает только одно место? |
| KISS | Задача решена настолько просто, насколько позволяет задача? |
| YAGNI | Этот код нужен прямо сейчас, а не «на будущее»? |