Я на самом деле трижды проходил довольно значительный рефакторинг в моей карьере. Код имеет тенденцию к затуханию, поэтому, если ваша кодовая база достаточно длинна, большой рефакторинг неизбежен. Все мои примеры были на основе частного кода, что может объяснить, почему публичные примеры трудно найти.
Первый раз это было приложение, которое, как ни крути, имело фундаментальную архитектуру, которая позволяла ему работать только с матричными принтерами. Когда моя компания больше не могла найти поставщика для поставки лент, они назначили меня, чтобы он работал с лазерным принтером.
Во второй раз произошла миграция нескольких сотен автоматизированных тестовых сценариев с C на Java, отчасти потому, что нам требовались лучшие кроссплатформенные возможности, а отчасти потому, что становилось трудно нанимать новых разработчиков C.
В третий раз я все еще нахожусь в центре, который представляет собой модульную систему огромного монолитного приложения, чтобы позволить модульное тестирование за счет уменьшения связи и для кроссплатформенных целей.
Я сравниваю усилия по восхождению на гору. Перед вами стоит огромная цель, но вы не решаете ее на макроуровне. Вы берете его по одной ручке за раз, всегда находясь в закрытом запасном положении, никогда не отключая предыдущую защиту, пока не встанет следующая. Вы начинаете просто делать небольшие постепенные улучшения, и через некоторое время вы поворачиваетесь, и вдруг появляется этот прекрасный вид.
Скажем, у вас есть 60000 файлов высокосвязанного кода, например. Вы хотите начать тестирование, но зависимости делают это невозможным. Как вы это исправите? Вы отделяете один файл. Вы добавляете автоматизированные тесты. Вы возвращаетесь в устойчивое положение, прежде чем двигаться дальше. Повторите 59,999 раз.
Если это звучит очень просто, это потому , что это просто. Это не легко, но это просто. Сначала трудно заметить какой-либо прогресс. Мы два года в том, что казалось невозможным рефакторингом, и, вероятно, у нас еще много лет до того, как мы закончим, но, оглядываясь назад, мы внезапно осознаем, насколько улучшился код, и мы смогли продолжать предоставлять новую функциональность нашим клиентам в то же время.
Два других раза работали так же. Вы найдете самый маленький безопасный шаг, который вы можете сделать, и вы делаете это, всегда поддерживая приложение в рабочем состоянии. Вы беспокоитесь только об общей картине, чтобы убедиться, что вы движетесь в правильном направлении. Все ваши действия маленькие, устойчивые и постепенные.