Проблема с проведением крупного рефакторинга заключается в том, что вы можете и иногда будете следовать по пути, который заставит вас осознать, что вы откусили больше, чем можете прожевать. Гигантские рефакторинги - это ошибка. Если конструкция системы изначально несовершенна, то рефакторинг может отвести вас далеко вперед, прежде чем вам нужно будет принять трудное решение. Либо оставьте систему такой, какая она есть, и обойдите ее, либо запланируйте редизайн и внесите некоторые существенные изменения.
Однако есть и другой способ. Реальное преимущество рефакторинга кода состоит в том, чтобы сделать вещи проще, легче читать и еще легче поддерживать. Когда вы подходите к проблеме, в которой вы не уверены, вы вносите изменения, заходите так далеко, чтобы посмотреть, к чему это может привести, чтобы узнать больше о проблеме, затем выбрасываете пик и применяете новый рефакторинг, основанный на том, что такое пик. научил тебя. Дело в том, что вы действительно можете с уверенностью улучшить свой код, только если шаги невелики и ваши усилия по рефакторингу не перевешивают вашу способность сначала писать тесты. Соблазн состоит в том, чтобы написать тест, затем код, затем кодировать еще немного, потому что решение может показаться очевидным, но вскоре вы понимаете, что ваше изменение изменит намного больше тестов, поэтому вам нужно быть осторожным, чтобы менять только одну вещь за раз.
Поэтому ответ никогда не должен превращать ваш рефакторинг в основной. Шаги малыша. Начните с извлечения методов, затем посмотрите на удаление дублирования. Затем перейдите к извлечению классов. Каждый в крошечных шагах одно незначительное изменение за один раз. Если вы извлекаете код, сначала напишите тест. Если вы удаляете код, удалите его, запустите тесты и решите, понадобятся ли какие-либо из сломанных тестов. Один крошечный шаг за шагом. Кажется, что это займет больше времени, но на самом деле значительно сократит время рефакторинга.
Однако реальность такова, что каждый спайк является, по-видимому, потенциальной тратой усилий. Изменения кода иногда никуда не ведут, и вы обнаруживаете, что восстанавливаете свой код из ваших VCS. Это просто реальность того, что мы делаем изо дня в день. Однако каждый спайк, который терпит неудачу, не теряется, если он чему-то вас учит. Каждое неудачное рефакторинг научит вас, что вы либо пытаетесь сделать слишком много слишком быстро, либо что ваш подход может быть неправильным. Это тоже не пустая трата времени, если вы чему-то научитесь. Чем больше вы делаете это, тем больше вы учитесь и тем эффективнее вы становитесь. Мой совет - просто наденьте его сейчас, научитесь делать больше, делая меньше, и признайте, что это, вероятно, так и должно быть, пока вы не станете лучше определять, как далеко завести шип, прежде чем он приведет вас в никуда.