Я фактично тричі переживав досить вагомий рефакторинг у своїй кар’єрі. Код має тенденцію до занепаду, тому якщо база вашого коду досить довга, великий рефактор майже неминучий. Усі мої приклади були на основі приватних кодів, що може пояснити, чому публічні приклади важко знайти.
Перший раз це був додаток, який, вірите чи ні, мав фундаментальну архітектуру, завдяки якій він працював лише з точковими матричними принтерами. Коли моя компанія більше не могла знайти постачальника для постачання стрічок, вони призначили мені роботу з лазерним принтером.
Вдруге відбулася міграція декількох сотень автоматизованих тестових сценаріїв з C на Java, почасти тому, що нам потрібна краща платформа, а частково тому, що було важко найняти нових розробників C.
Третій раз я все ще в середині, яка модулює величезний монолітний додаток, щоб дозволити тестування одиниць за рахунок зменшення зчеплення та для межплатформних цілей.
Я порівнюю зусилля з підйомом на гору. Перед вами ця величезна мета, але ви не вирішите її на макрорівні. Ви берете його за одне рукоятку, завжди займаючи близьке резервне положення, ніколи не відключаючи попередню безпеку до наступного. Ви починаєте лише робити невеликі додаткові вдосконалення, а через деякий час ви повертаєтесь і тут раптом відкривається прекрасний вид.
Скажімо, у вас є, наприклад, 60 000 файлів сильно зв'язаного коду. Ви хочете почати ставити його під тест одиниці, але залежність робить це неможливим. Як це виправити? Ви роз’єднуєте один файл. Ви додаєте автоматизовані тести. Ви повертаєтесь на стійку землю, перш ніж рухатись далі. Повторіть 59999 разів.
Якщо це звучить просто, це тому, що це просто. Це непросто, але просто. Спочатку важко помітити будь-який прогрес. Ми два роки у тому, що здавалося неможливим рефактором, і, ймовірно, перед нами роки, поки ми не закінчимо, але, озираючись назад, ми раптом усвідомлюємо, наскільки краще вже отриманий код, і ми змогли продовжувати надавати нові функціональні можливості до наших клієнтів в середній час.
Інші два рази працювали так само. Ви знаходите найменший безпечний крок, який ви можете зробити, і ви його зробите, завжди підтримуючи програму в робочому стані. Ви хвилюєтесь лише за велику картину, щоб переконатися, що рухаєтесь у правильному напрямку. Всі ваші дії невеликі, стійкі та поступові.