Проблема з великим рефакторингом полягає в тому, що ви можете і інколи будете слідувати шляху, який приведе вас до усвідомлення того, що ви вкусили більше, ніж можете жувати. Гігантські реконструкції - це помилка. Якщо в першу чергу помилка дизайну системи, то рефакторинг може зайняти вас лише до того, як вам потрібно прийняти важке рішення. Або залиште систему такою, якою вона є, і обійдіть її, або плануйте переробляти та вносити деякі значні зміни.
Однак є й інший спосіб. Справжня перевага коду рефакторингу полягає в тому, щоб зробити речі простішими, легшими для читання та ще простішими в обслуговуванні. Якщо ви звертаєтесь до проблеми, щодо якої ви неясні, ви викликаєте зміну, заходите так далеко, щоб дізнатися, куди це може призвести, щоб дізнатися більше про проблему, а потім викиньте шип і застосуйте новий рефакторинг на основі того, що шип навчив тебе. Справа в тому, що ви дійсно можете вдосконалити свій код лише з упевненістю, якщо кроки невеликі, а ваші зусилля по рефакторингу не перекриють вашу здатність спочатку написати свої тести. Спокуса написати тест, потім код, а потім ще якийсь код, оскільки рішення може здатися очевидним, але незабаром ви зрозумієте, що ваша зміна змінить ще багато тестів, тому вам потрібно бути обережним, щоб змінити лише одне за раз.
Отже, відповідь - ніколи не робити рефакторинг основним. Кроки дитини. Почніть з вилучення методів, потім перегляньте видалення дублювання. Потім переходите до занять з вилучення. Кожен за допомогою крихітних кроків по одній незначній зміні. Якщо ви виймаєте код, спочатку напишіть тест. Якщо ви видаляєте код, видаліть його та запустіть свої тести та вирішіть, чи потрібен буде якийсь із зламаних тестів. Один маленький малюк крокує за раз. Здається, це займе більше часу, але насправді значно скоротить ваш час рефакторингу.
Однак реальність полягає в тому, що кожен стрибок, здається, є потенційною марною витратою зусиль. Зміни коду іноді нікуди не діваються, і ви виявляєте, що відновлюєте свій код з ваших vcs Це просто реальність того, що ми робимо з дня на день. Кожен спайк, який виходить з ладу, не витрачається даремно, якщо він чогось вчить. Кожен зусилля, що не ремонтується, невдало навчить вас, що ви або намагаєтесь зробити занадто багато занадто швидко, або що ваш підхід може бути неправильним. Це теж не марно витрачає час, якщо ви щось з цього навчитесь. Чим більше ви будете робити ці речі, тим більше навчаєтесь і тим ефективніше станете в ній. Моя порада - просто носити її зараз, навчитися робити більше, роблячи менше, і визнати, що це саме так, напевно, потрібно, поки не станеш краще визначати, як далеко взяти шип до того, як він приведе тебе нікуди.