AHA: не торопись с абстракцией
AHA - "Avoid Hasty Abstractions", не торопись с абстракцией. Абстракция хороша, когда мы уже понимаем устойчивую общую закономерность. Если обобщить код слишком рано, вместо удобного инструмента получится механизм с флагами, исключениями и параметрами - его тяжелее читать, чем два простых куска, из которых он вырос.
Иногда безопаснее некоторое время сохранить две простые реализации. Реальные изменения покажут, что у них действительно общее, а что было лишь внешним сходством. Это прямое продолжение мысли Сэнди Метц: дублирование дешевле, чем неправильная абстракция, - потому что из дубля легко выделить общее позже, а из неправильной абстракции трудно выбраться.
Абстракцию заслуживают, а не назначают. Надёжная общая часть - та, что пережила несколько реальных изменений и осталась общей. Пока история изменений короткая, подождите: рано выделенная абстракция свяжет то, что должно было разойтись.
Понять, пора ли обобщать, помогает лаборатория - она смотрит не на сходство, а на число переживших изменений.
Пора ли абстрагировать?
Рано: сохраните две простые реализации. Абстракция сейчас свяжет то, что должно разойтись.
Когда абстракция надёжна по AHA?
Теперь у нас есть и DRY, и AHA - и они нередко спорят с KISS. Этому конфликту стоит посвятить отдельную главу.