Някъде из Facebook някой пусна следната картинка с коментар „Какво е code refactoring“:
Хумористичната стойност настрана, това ми припомни една мисъл за рефакторирането, на която попаднах преди време:
Може да си говорим за два вида рефакториране – „чистене на гараж“ и „чистене на кухня“.
Чистенето на гараж е нещо, което става относително рядко. Веднъж или два пъти в годината отделяте един уикенд и оправяте всичко там. Това е времеемка процедура, която ще повторите чак догодина. През това време гаражът бавно става по-мръсен и по-разхвърлян.
Чистенето на кухня е различно. Обикновено започвате с чиста кухня. Докато готвите, намирате малки моменти, в които да чистите – измивате някой съд докато зехтина загрее, избърсвате плота между две бъркания на манджата и прочее. Чистенето е разбито на малки интервали в процеса на готвене. Накрая кухнята пак е чиста.
При рефакторирането тип „гараж“ отделяте дни/седмица/две/месец да преработите сериозно кода, без да правите нищо друго. При типа „кухня“, отделяте (например) 5-10 минути на всеки час да подобрите кода, който сте написали малко по-рано.
Когато литературата (Refactoring, Extreme Programming: Explained, Refactoring to Patterns и дори Design Patterns) говори за рефакториране се има предвид второто – тип „кухня“. Рефакторирането трябва да става на малки стъпки, заедно с добавянето на код. То е подход към програмирането. Не случайно е стъпка в TDD-цикъла.
От друга страна, рефакторирането тип „гараж“ обикновено е лошо. Значи две неща – (1) по някакъв начин кода е станал с лошо качество и (2) известно време няма да се добавят нови feature-и, понеже трябва да се алокира време за преработка. В добрия случай блокирате проекта за седмица/две/месец, защото не сте написали достатъчно подходящ код на първо място.
В лошия – става като с котката в картинката.