Кажется, что после того, как я написал значительное количество кода, у меня возникает такое тревожное чувство, будто я не сделал это наилучшим образом, и в итоге я постоянно рефакторинг и трачу слишком много времени на проект, или никогда не получаю это сделано иногда. Это когда-нибудь случается с кем-то еще, и как вы справляетесь с этим?
code-quality
refactoring
Atomix
источник
источник
Ответы:
Мне нравятся эти моменты, когда они случаются со мной.
Причина: если бы я не оглянулся назад на свою работу и не подумал, что есть что-то, что я мог бы сделать лучше, чем не стал бы развиваться как разработчик Поэтому, когда наступают эти моменты просветления, примите их и обратите внимание на то, что вы узнали. Рассмотрите свое расписание для текущего проекта и, если возможно, измените код, если это невозможно, возьмите урок и используйте его в будущих реализациях проектов.
В любом случае, учиться на собственных ошибках - это здорово!
источник
Вот несколько правил, чтобы ограничить эту деятельность и сделать ее более продуктивной:
источник
Кажется, вы всегда можете сделать рефакторинг, не так ли? Я пытаюсь ограничить рефакторинг только при попытке решить другие вопросы. Например, рефакторинг, когда у вас есть проблема с производительностью, и рефакторинг, чтобы помочь вам решить ее - рефакторинг, когда вам нужно добавить новую функциональность, и рефакторинг поможет вам ее решить
источник
Честно говоря, я бы больше волновался, если бы вы запускали огромную кучу кода и думали, что все идеально и не требует рефакторинга ...
Когда я был моложе и неопытен, я очень высокомерно относился к своим навыкам программирования и всегда склонялся к мысли, что можно действительно хорошо спроектировать и спланировать - и что, как только я доберусь до стадии реализации, я просто откажусь от этого » Все будет прекрасно.
Реальность почти противоположна. Некоторые даже говорят, что, как только вы начнете кодировать, вы должны быть в режиме обслуживания. Идея заключается в том, что стадия «реализации» SDLC на самом деле не существует как таковая, потому что вы никогда не должны откладывать исправление ошибок или рефакторинг и делать вид, что код, который вы создаете, «свежий» и совершенный.
Все , что сказал, я полагаю , что IS можно получить слишком одержимы рефакторинга. Я просто еще не видел это. И чем больше у меня опыта, тем больше я думаю, что было бы хорошо, если бы больше команд разработчиков программного обеспечения явно отказались работать в сжатые сроки и влезать в технические долги. В конце концов, это самая распространенная причина, почему рефакторинг откладывается в реальном мире.
источник
Я бы предложил не зависеть чисто от ощущения или запаха кода.
Четко перечислите, что не так с кодом и каковы решения. Серьезно, запишите это, потому что вы захотите проверить, насколько эффективен ваш рефакторинг против этого.
Определите способы разбиения рефактора на достижимые куски и расставьте приоритеты по ним. Имейте дисциплину, чтобы сосредоточиться только на сфере действия каждого куска, избегая касательных, которые могут подорвать вашу задачу.
Кроме того, определите, какие модульные тесты вы можете написать против существующего кода, прежде чем продолжить. Если уже есть обширные тесты, это здорово. Отсутствие модульных тестов представляет собой прекрасную возможность сделать некоторые.
источник
Нет сомнений, что я попал в эту ловушку, но некоторый рефакторинг важен для будущей поддержки / отладки.
При написании основного фрагмента кода становится очень легко переходить строки кода в метод, который в настоящее время пишется. Когда я завершил основную часть кода, я размещаю комментарий проверки кода: Затем, через несколько дней, я сделаю обзор кода и проведу соответствующий рефакторинг. Если у меня возникнут проблемы с чтением через несколько дней, что произойдет через несколько месяцев или даже лет.
источник
Я попадаю в эту ловушку, когда впервые изучаю язык или технологию. Например, когда вы впервые изучаете Java, представьте, что вы пишете веб-приложение с сервлетом, думая, что это правильный путь. Тогда вы понимаете, что есть JSP, и вы думаете, что это новее, что, вероятно, правильно. Затем, как только вы пройдете половину пути, вы найдете Struts и, возможно, некоторые EJB-материалы, после чего вы найдете Spring (на основе xml), после которого вы найдете классные аннотации @MVC, после чего вы обнаружите, что все это слишком многословно и вы избалованы Выбор между Groovy / Grails и Scala / Лифт! Это идеально подходит для личных проектов, поскольку обычно нужно учиться и не обязательно соблюдать какой-то крайний срок.
Я имел обыкновение быть uber-refactorer на работе также. Но по мере накопления опыта я стал более разборчивым в отношении того, что я буду рефакторинг. Оказывается, когда вы уходите из компании, вы не берете код с собой, и обычно другие инженеры могут разрушить код почти быстрее, чем вы можете это исправить.
источник
Эмпирическое правило, которому я следую, таково: я выполняю рефакторинг до тех пор, пока он не будет оптимизирован настолько, насколько это возможно в то время, и затем я не реорганизую его снова, если ситуация не изменится, или реже, если у меня появится вдохновение о каком-то новом и лучшем способе делать вещи (например, используя новую языковую функцию).
Например, однажды мне пришлось написать новый модуль кода для существующего приложения. Я написал это определенным образом, и на следующий день я подумал об этом и решил, что смогу реорганизовать его и сделать его более абстрактным, поскольку мы были совершенно уверены, что его придется расширять для других целей. Поэтому я переработал код. Затем я решил, что это немного слишком обобщенно, и я объединил некоторые классы и интерфейсы, которые в основном делали одно и то же, используя Generics (C #) для получения той же функциональности. На данный момент я, вероятно, могдальнейший рефакторинг, чтобы сделать его еще лучше, но он «достаточно хорош» - код хорошо написан, следует правильным шаблонам проектирования и инженерным концепциям и является расширяемым. Я реорганизовал бы его снова, только если требования вынудили меня переоценить код или если бы была языковая функция, которая могла бы сделать код более понятным и / или более читабельным.
источник