Реконструкція - це і має бути - тривалий процес. Недостатньо просто відповідати вимогам з робочою та перевіреною реалізацією, яка ще трохи неповна.
"Зробіть так, щоб вона працювала краще" .
Я не можу згадати, де я читав цю цитату, але це ключ до того, щоб добре застосувати рефакторинг, і я вважаю це непрофесійним, якщо це зробити інакше.
Безперервне рефакторинг - це як витирання розливу під час готування їжі та прибирання посуду після того, як ви їли їжу. Цілеспрямований рефакторинг - це як знайти брудну кухню, але тільки встигнути випрати брудну склянку чи дві. Чи хотіли б ви жити з безперервно брудною кухнею, чи хотіли б утримувати речі в чистоті, коли йдете разом?
Ви отримуєте код, щоб він працював, а потім переробляєте код, щоб забезпечити найкращу реалізацію, яку ви можете використати. Якщо ви робите щось знайоме, можливо, ви вперше реалізуєте найкращий код, однак, щоб переконатися в роботі, вам знадобиться трохи часу. Якщо це виглядає так, ніби ви могли б покращити свій код, тоді ви намагаєтеся зробити рефактор, щоб переконатися, що ваш код є як мінімум таким чистим і чистим, наскільки ви можете його зробити. Це означає, що ви зменшуєте суму технічної заборгованості, яку ви залишаєте після себе, і ви полегшуєте читання та переробку наступного разу, коли з цим кодом потрібно розбиратися. Це основне значення за мантрою TDD "Червоно-зелений-рефактор", за винятком того, що в TDD ви рефактор передусім для видалення дублювання, він також повинен переглянути інші елементи, які можуть бути відновлені, наприклад, великі класи, довгі методи,
Якщо ви зіткнулися з капітальним переоформленням, то, можливо, ви можете відкласти його на деякий час, особливо якщо у вас в графіку дуже мало часу. Однак це за умови, що функціональність вашого коду не буде порушена, а також за умови, що реалізація продовжуватиме відповідати вимогам. Подібна ситуація має бути рідкісним явищем, і ви можете допомогти переконатися, що вона стає ще рідкішою, якщо ви постійно здійснюєте рефакторинг, коли йдете разом. Ще важливіше, однак, що ви не можете ризикувати занадто довго залишати свої основні зміни, інакше згодом ви створите ще більшу завантаженість роботи, яка може бути набагато дорожчою для виправлення, або може призвести до ще більш дорогих витрат. провал проекту.
У мене складається враження, що багато людей схильні плутати визначення для Refactoring та Re-Engineering . Два терміни описують стратегії управління дуже різними ситуаціями. Якщо ви хочете перепрофілюватися, ви берете на себе зобов’язання зробити кардинальні зміни, які змінять поведінку системи. Це призведе до недійсності деяких тестів, а також вимагатиме нових тестів. Коли ви перебуваєте в Refactor, ви гарантуєте, що система продовжує точно вести себетак само, як це було до зміни, однак ви також гарантуєте, що ваш код матиме довговічність і що його буде легше підтримувати з часом. Ви не «сутенерствуєте» зі своїм кодом за пекло, ви дотримуєтесь професійного стандарту чистого коду, який знизить ризик виходу з ладу, і забезпечить, щоб ваш код залишався приємним для роботи та професійного стандарту .
Повертаючись до аналогії зламаних вікон, якщо ви зламаєте вікно, ви повинні його відразу відремонтувати. Якщо ви не помітили, що вікно зламано, вам потрібно визначити вартість, якщо ви залишите вікно зламаним. Тепер, повторіть попередні два пропозиції, але замінити Bug для вікна. Вам нарешті потрібна інша стратегія. Якщо ви створили помилку під час кодування, ви виправляєте її відразу, або ви бачите, чи потрібні зміни для реінжинірингу, і ви приймаєте комерційне рішення про те, коли найкраще вирішити проблему. Таким чином, ви не рефактор, щоб вирішити проблему, ви рефактор, щоб переконатися, що простіше знайти та виправити проблеми. Мені все одно, наскільки дивовижно, на вашу думку, ваш код, у складних системах завжди будуть проблеми, з якими потрібно буде вирішуватися з часом. Це те, в чому полягає технічна заборгованість, і чому рефакторинг повинен бути тривалим процесом, коли ви реалізуєте свій код , а не залишатися на деякий довільний майбутній час.
Отже, коротко кажучи, відповідь про те, що в деяких випадках може бути прийнятним відкласти основні зміни коду з метою встановлення граничного терміну, однак не слід вважати звичайною практикою трактувати рефакторинг як вправу незалежно від вашої щоденної роботи з впровадження, і, безумовно, ніколи не використовуються як виправдання командами, незнайомими з базою коду, як варіант, щоб уникнути того, щоб їх реалізація була такою ж чистою та чистою, наскільки це можливо зробити це за обставин.