Я большой сторонник правила бойскаутов :
Всегда проверяйте модуль более чистым, чем когда вы его проверяли. "Независимо от того, кто был первоначальным автором, что, если бы мы всегда приложили некоторые усилия, независимо от того, насколько они малы, чтобы улучшить модуль. Каков будет результат? Я думаю, что если мы все следовали этому простому правилу, мы бы увидели конец неослабевающего ухудшения наших программных систем. Вместо этого наши системы постепенно становились все лучше и лучше по мере их развития. Мы также увидели бы команды, заботящиеся о системе в целом, скорее чем просто люди, заботящиеся о своей маленькой маленькой части.
Я также большой сторонник связанной идеи Оппортунистического Рефакторинга :
Несмотря на то, что есть места для некоторых запланированных попыток рефакторинга, я предпочитаю поощрять рефакторинг как оппортунистическое действие, выполняемое всякий раз, когда и где код должен быть очищен - кем бы то ни было. Это означает, что в любой момент, когда кто-то видит какой-то код, который не так ясен, как следовало бы, он должен воспользоваться возможностью исправить это прямо здесь и тогда - или, по крайней мере, в течение нескольких минут.
Особо обратите внимание на следующую выдержку из статьи о рефакторинге:
Я настороженно отношусь к любым методам разработки, которые вызывают трения из-за оппортунистического рефакторинга ... Я чувствую, что большинство команд не проводят достаточно рефакторинга, поэтому важно обращать внимание на все, что отговаривает людей делать это. Чтобы избавиться от этого, помните о том, что в любой момент вы чувствуете, что вам не хочется делать небольшой рефакторинг, который, как вы уверены, займет всего минуту или две. Любой такой барьер - это запах, который должен вызывать разговор. Так что запишите разочарование и обсудите это с командой. По крайней мере, это должно быть обсуждено во время следующей ретроспективы.
Там, где я работаю, есть одна практика разработки, которая вызывает серьезные трения - Code Review (CR). Всякий раз, когда я изменяю что-либо, что не входит в сферу моего «назначения», мои рецензенты упрекают меня в том, что я усложняю изменение для обзора. Это особенно актуально, когда речь идет о рефакторинге, поскольку это затрудняет сравнение различий между строками. Этот подход является стандартным здесь, что означает, что оппортунистический рефакторинг проводится редко, и имеет место только «запланированный» рефакторинг (который обычно слишком мал, слишком поздно), если он вообще выполняется.
Я утверждаю, что преимущества того стоят, и что 3 рецензента будут работать немного усерднее (чтобы на самом деле понять код до и после, а не смотреть на узкую область видоизмененности строк - сам обзор был бы лучше благодаря одному этому ) так что следующие 100 разработчиков, читающих и поддерживающих код, получат пользу. Когда я представляю этот аргумент моим рецензентам, они говорят, что у них нет проблем с моим рефакторингом, если он не в том же CR. Однако я утверждаю, что это миф:
(1) В большинстве случаев вы понимаете, что и как вы хотите провести рефакторинг, когда находитесь в середине своего задания. Как говорит Мартин Фаулер:
Когда вы добавляете функциональность, вы понимаете, что добавляемый код содержит некоторое дублирование с существующим кодом, поэтому вам нужно реорганизовать существующий код, чтобы очистить его ... Вы можете получить что-то работающее, но понимаете, что это будет лучше, если взаимодействие с существующими классами было изменено. Воспользуйтесь этой возможностью, чтобы сделать это, прежде чем считать себя готовым.
(2) Никто не будет благосклонно смотреть на то, как вы выпускаете «рефакторинг» КР, которые вы не должны были делать. У CR есть определенные накладные расходы, и ваш менеджер не хочет, чтобы вы «тратили свое время» на рефакторинг. Когда это связано с изменением, которое вы должны сделать, эта проблема сводится к минимуму.
Проблема усугубляется Resharper, так как каждый новый файл, который я добавляю к изменению (и я не могу заранее точно знать, какие файлы в итоге будут изменены), обычно завален ошибками и предложениями - большинство из которых находятся на месте и полностью заслуживают крепления.
В результате я вижу ужасный код и просто оставляю его там. По иронии судьбы, я чувствую, что исправление такого кода не только не улучшит мое положение, но фактически снизит их и представит, что я «не сфокусированный» парень, который тратит время на исправление вещей, которые никому не нужны, вместо того, чтобы выполнять свою работу. Мне плохо из-за этого, потому что я действительно презираю плохой код и не могу смотреть его, не говоря уже о том, чтобы вызывать его из моих методов!
Любые мысли о том, как я могу исправить эту ситуацию?
your manager doesn't want you to "waste your time" on refactoring