У кого-нибудь еще есть проблемы с рефакторингом? [закрыто]


17

Кажется, что после того, как я написал значительное количество кода, у меня возникает такое тревожное чувство, будто я не сделал это наилучшим образом, и в итоге я постоянно рефакторинг и трачу слишком много времени на проект, или никогда не получаю это сделано иногда. Это когда-нибудь случается с кем-то еще, и как вы справляетесь с этим?


16
Вам нужны более жесткие сроки :)

Вы говорите здесь о коде, который вы пишете для себя (хобби-проекты) или код, который вы пишете как часть вашей работы?
Carson63000


1
Вы случайно немного анальный где-нибудь в жизни? Я знаю, что могу быть ужасно ОКР и совершенствоваться, если позволю себе ...
Хамфри Богарт

1
Совершенный враг достаточно хорошего. Сделайте хорошую работу. Сделай так, чтобы это работало. Не возвращайтесь к нему, если вы не можете показать эмпирические доказательства того, что он глючит или создает проблемы с производительностью.
Blrfl

Ответы:


18

Мне нравятся эти моменты, когда они случаются со мной.

Причина: если бы я не оглянулся назад на свою работу и не подумал, что есть что-то, что я мог бы сделать лучше, чем не стал бы развиваться как разработчик Поэтому, когда наступают эти моменты просветления, примите их и обратите внимание на то, что вы узнали. Рассмотрите свое расписание для текущего проекта и, если возможно, измените код, если это невозможно, возьмите урок и используйте его в будущих реализациях проектов.

В любом случае, учиться на собственных ошибках - это здорово!


8

Вот несколько правил, чтобы ограничить эту деятельность и сделать ее более продуктивной:

  • время, например, установите таймер на 25 минут
  • делайте это только тогда, когда у вас есть достойный тестовый охват.
  • постарайтесь сделать ваш рефакторинг полезным для разработки следующих нескольких функций

1
Я согласен с вами, но о (3) ... Я бы подумал о следующих нескольких функциях, только если я уверен, что эти функции должны быть включены в следующую версию, потому что в противном случае вы могли бы попасть в YAGNI (You Ain ' Это нужно). Я предлагаю прочитать книгу Мартина Фаулера и Кента Бека «Рефакторинг: улучшение дизайна существующего кода».
Оскар Медерос

1
@ Оскар: согласен. Я имел в виду избегать рефакторинга ради себя и создавать YAGNI.
ажеглов

7

Кажется, вы всегда можете сделать рефакторинг, не так ли? Я пытаюсь ограничить рефакторинг только при попытке решить другие вопросы. Например, рефакторинг, когда у вас есть проблема с производительностью, и рефакторинг, чтобы помочь вам решить ее - рефакторинг, когда вам нужно добавить новую функциональность, и рефакторинг поможет вам ее решить


3

Честно говоря, я бы больше волновался, если бы вы запускали огромную кучу кода и думали, что все идеально и не требует рефакторинга ...

Когда я был моложе и неопытен, я очень высокомерно относился к своим навыкам программирования и всегда склонялся к мысли, что можно действительно хорошо спроектировать и спланировать - и что, как только я доберусь до стадии реализации, я просто откажусь от этого » Все будет прекрасно.

Реальность почти противоположна. Некоторые даже говорят, что, как только вы начнете кодировать, вы должны быть в режиме обслуживания. Идея заключается в том, что стадия «реализации» SDLC на самом деле не существует как таковая, потому что вы никогда не должны откладывать исправление ошибок или рефакторинг и делать вид, что код, который вы создаете, «свежий» и совершенный.

Все , что сказал, я полагаю , что IS можно получить слишком одержимы рефакторинга. Я просто еще не видел это. И чем больше у меня опыта, тем больше я думаю, что было бы хорошо, если бы больше команд разработчиков программного обеспечения явно отказались работать в сжатые сроки и влезать в технические долги. В конце концов, это самая распространенная причина, почему рефакторинг откладывается в реальном мире.


2

Я бы предложил не зависеть чисто от ощущения или запаха кода.

Четко перечислите, что не так с кодом и каковы решения. Серьезно, запишите это, потому что вы захотите проверить, насколько эффективен ваш рефакторинг против этого.

Определите способы разбиения рефактора на достижимые куски и расставьте приоритеты по ним. Имейте дисциплину, чтобы сосредоточиться только на сфере действия каждого куска, избегая касательных, которые могут подорвать вашу задачу.

Кроме того, определите, какие модульные тесты вы можете написать против существующего кода, прежде чем продолжить. Если уже есть обширные тесты, это здорово. Отсутствие модульных тестов представляет собой прекрасную возможность сделать некоторые.


1

Нет сомнений, что я попал в эту ловушку, но некоторый рефакторинг важен для будущей поддержки / отладки.

При написании основного фрагмента кода становится очень легко переходить строки кода в метод, который в настоящее время пишется. Когда я завершил основную часть кода, я размещаю комментарий проверки кода: Затем, через несколько дней, я сделаю обзор кода и проведу соответствующий рефакторинг. Если у меня возникнут проблемы с чтением через несколько дней, что произойдет через несколько месяцев или даже лет.


1

Я попадаю в эту ловушку, когда впервые изучаю язык или технологию. Например, когда вы впервые изучаете Java, представьте, что вы пишете веб-приложение с сервлетом, думая, что это правильный путь. Тогда вы понимаете, что есть JSP, и вы думаете, что это новее, что, вероятно, правильно. Затем, как только вы пройдете половину пути, вы найдете Struts и, возможно, некоторые EJB-материалы, после чего вы найдете Spring (на основе xml), после которого вы найдете классные аннотации @MVC, после чего вы обнаружите, что все это слишком многословно и вы избалованы Выбор между Groovy / Grails и Scala / Лифт! Это идеально подходит для личных проектов, поскольку обычно нужно учиться и не обязательно соблюдать какой-то крайний срок.

Я имел обыкновение быть uber-refactorer на работе также. Но по мере накопления опыта я стал более разборчивым в отношении того, что я буду рефакторинг. Оказывается, когда вы уходите из компании, вы не берете код с собой, и обычно другие инженеры могут разрушить код почти быстрее, чем вы можете это исправить.


1

Эмпирическое правило, которому я следую, таково: я выполняю рефакторинг до тех пор, пока он не будет оптимизирован настолько, насколько это возможно в то время, и затем я не реорганизую его снова, если ситуация не изменится, или реже, если у меня появится вдохновение о каком-то новом и лучшем способе делать вещи (например, используя новую языковую функцию).

Например, однажды мне пришлось написать новый модуль кода для существующего приложения. Я написал это определенным образом, и на следующий день я подумал об этом и решил, что смогу реорганизовать его и сделать его более абстрактным, поскольку мы были совершенно уверены, что его придется расширять для других целей. Поэтому я переработал код. Затем я решил, что это немного слишком обобщенно, и я объединил некоторые классы и интерфейсы, которые в основном делали одно и то же, используя Generics (C #) для получения той же функциональности. На данный момент я, вероятно, могдальнейший рефакторинг, чтобы сделать его еще лучше, но он «достаточно хорош» - код хорошо написан, следует правильным шаблонам проектирования и инженерным концепциям и является расширяемым. Я реорганизовал бы его снова, только если требования вынудили меня переоценить код или если бы была языковая функция, которая могла бы сделать код более понятным и / или более читабельным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.