Я согласен с ответами других, но это также зависит от того, почему вы пишете код. Если это конкретный проект на конечный срок, у вас может не быть больших шансов. Если это может быть использовано другими, убедитесь, что рефакторинг не нарушает ничего, что они используют. Если это долгосрочный проект, особенно коммунальный, то почти наверняка потребуется обширный рефакторинг.
Я пишу коммунальную библиотеку около 13 лет и прошел через 5 с половиной ревизий (ту, через которую я прохожу). Во многих случаях это происходит потому, что технология улучшилась, и то, что я сделал для себя, теперь я могу делать со стандартными библиотеками. И за эти годы я выучил много лучших стратегий.
В общем, хороший рефакторинг часто означает выброс старого кода.
UPDATE
Современные инструменты позволяют легко выполнять множество операций автоматически (например, изменение имен, пакетов). Эксперты рекомендуют, чтобы методы были короткими, поэтому всякий раз, когда вы обнаруживаете, что ваш метод растягивается на две страницы, он превращается в более короткие. Но бывают случаи, когда инструменты не помогают, и вам приходится создавать код, который временно не работает. В этом случае убедитесь, что у вас (а) запущены модульные тесты на рабочей версии (б) зафиксировать его. Легко войти в сложную операцию рефакторинга и понять, что вы сломали ее настолько сильно, что вам нужно вернуться назад.
Если у вас есть пользователи, которые зависят от вашего кода, убедитесь, что вы продолжаете предоставлять API, который они знают. Например, предположим, что у вас есть подпрограмма под названием
Date date = getLastUpdate();
и вы решаете (как я и многие другие), что java.util.Date
отчаянно сломлен. Вы решаете сменить его на Joda DateTime
, но в процессе это будет сложно. Вам, вероятно, нужно выделить время, чтобы завершить его за один проход. Не меняйте API на
DateTime date = getLastUpdate();
Создать новый интерфейс, такой как
DateTime date = getLastDateTimeUpdate();
Затем отметьте оригинал как @Deprecated
Вы не должны удалять более раннюю версию, пока не решите сделать новую версию (динамическое изменение API теряет друзей)