Глава 8

Когда DRY спорит с KISS и AHA

У DRY есть тёмная сторона. Слепая борьба с любым повторением часто создаёт более тяжёлый код, чем само повторение. Универсальная функция постепенно получает новые параметры, режимы и исключения - и то, что задумывалось как "убрать дубль", превращается в клубок, который боятся трогать.

Здесь DRY сталкивается с KISS (решение перестаёт быть простым) и с AHA (абстракция выделена слишком рано). Разрешается конфликт не подсчётом одинаковых фрагментов, а вопросом о причине изменения.

Момент объединения - это общая причина, а не второе сходство. Хороший момент свести код воедино наступает не после второго похожего фрагмента, а после появления понятной общей причины для их изменения. Две функции могут быть похожи и при этом решать разные задачи - тогда пусть остаются раздельными.

Практический вывод простой: повторение - это осознанный компромисс, а не всегда ошибка. Немного дублирования ради ясности и независимости частей часто дешевле, чем преждевременное обобщение. Посмотрим это на коде - на разнице между ложным и осознанным DRY.

Ссылки