Код рефакторинга: когда что делать? - PullRequest
22 голосов
/ 02 октября 2008

С тех пор, как я начал использовать .NET, я только что создал классы Helper или частичные классы, чтобы код находился и содержался в их собственных маленьких контейнерах и т. Д.

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

Очевидно, что чистый код субъективен, но я говорю о том, когда использовать вещи (а не как их использовать), такие как полиморфизм, наследование, интерфейсы, классы и как более правильно проектировать классы (чтобы сделать их более полезными, а не просто скажите «DatabaseHelper», поскольку некоторые считают, что в коде пахнет вики ).

Существуют ли какие-либо ресурсы, которые могли бы помочь с принятием такого рода решений?

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

Ответы [ 10 ]

23 голосов
/ 02 октября 2008

Реальным открытием для меня было Рефакторинг: улучшение дизайна существующего кода :

При правильной подготовке опытной системы дизайнер может взять плохой дизайн и переработать его в хорошо продуманный, надежный код. В этой книге Мартин Фаулер показывает, где возможности для рефакторинг обычно можно найти, и как идти о переработке плохой дизайн в хороший.

Рефакторинг http://ecx.images -amazon.com / images / I / 519XT0DER6L._SL160_PIlitb-dp-arrow, TopRight, 21, -23_SH30_OU01_AA115_.jpg

Это помогло мне эффективно и систематически проводить рефакторинг кода. Также это очень помогло мне в обсуждениях с другими разработчиками, когда их holy code нужно изменить ...

11 голосов
/ 02 октября 2008

Джефф Этвуд сделал хорошее сообщение в блоге о рефакторинге и запахах кода , вы можете проверить это.

Рефакторинг кода в .NET занимает некоторое время. Вам необходимо знать некоторые объектно-ориентированные принципы проектирования (или методы проектирования ), чтобы эффективно выполнять рефакторинг и беспощадно .

Короче говоря, вы реорганизуете код для удаления запахов кода и облегчения внесения изменений. Кроме того, не переусердствуйте.

5 голосов
/ 02 октября 2008

Вот рецензия на косую точку книги под названием Чистый код .

Книга, кажется, немного сухая, но очень хорошая.

2 голосов
/ 02 октября 2008

Проверьте Мартина Фаулера комментарии и книги на Рефакторинг

1 голос
/ 22 июля 2009

Мое эмпирическое правило: оставляйте код не хуже, чем вы его нашли .

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

Индивидуальные рефакторинги иногда имеют сомнительную выгоду, и - как крайний пример - это действительно может быть аргумент, если m_Pi лучше, чем m_PI. Однако чаще всего один выбор является более последовательным и менее удивительным, даже если он явно не «лучше».

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

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

Еще один момент - после исправления ошибок. После, так что пред-репро не затрагивается, а исправление ошибки и рефакторинг - это две отдельные фиксации.

1 голос
/ 02 октября 2008

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

Не стоит откладывать название книги - вместо того, чтобы рассматривать Рефакторинг как формальное понятие (которое имеет свое место), в этой книге есть много и много простых советов «почему я не подумал об этом» Такие вещи, как «пройти через класс и удалить любые методы, не связанные непосредственно с этим классом, и поместить их в другой».

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

1 голос
/ 02 октября 2008

Я бы порекомендовал Domain Driven Design . Я думаю, что оба принципа YAGNI и AlwaysRefactor являются двумя упрощенными. Вечный вопрос по этому вопросу заключается в том, могу ли я рефакторировать «if (someArgument == someValue)» в функцию или оставить ее встроенной?

Нет ответа да или нет. DDD рекомендует провести рефакторинг, если тест представляет собой бизнес-правило. Рефакторинг - это не только повторное использование, но и прояснение намерений.

1 голос
/ 02 октября 2008
  • Поменяйте код, когда он вызывает проблемы. Подойдут любые проблемы: производительность, масштабируемость, интеграция, сопровождение - все, что заставляет вас тратить на это больше времени, когда нужно. Если он не сломан, не чините его, даже если вы не уверены, что он чистый или соответствует современным стандартам.
  • Не тратьте слишком много времени на совершенствование кода. Вы никогда не достигнете совершенства, но вы можете потратить много времени, пытаясь это сделать. Помните закон убывающей отдачи.
  • Внутри проекта только рефакторинг кода, когда вы фактически работаете над функциональностью, которая зависит от него. То есть если у вас есть пользовательская история для итераций, требующих «изменить механизм загрузки» или «исправить ошибку при загрузке файла», вы можете перефакторизовать код загрузки файла. Однако, если ваша пользовательская история о «фейслифтинге дизайна пользовательского интерфейса загрузки файлов», не переходите к бизнес-логике.
0 голосов
/ 22 июля 2009

Существует веб-страница, посвященная рефакторингу, по адресу http://www.refactoring.com/.. На ней имеется множество ссылок на дополнительные ресурсы по теме рефакторинга кода, а также список рассылки для обсуждения вопросов, связанных с рефакторингом.

И последнее, но не менее важное: существует большой (и все еще растущий) каталог рефакторингов, который выходит далеко за рамки того, что написано в (очень рекомендуемой) книге по рефакторингу Мартина Фаулера.

0 голосов
/ 03 октября 2008

Я только что получил копию Code Complete и обнаружил, что есть раздел по этому вопросу.

Хотя я все еще буду читать книгу принятых ответов, то, чему научил меня Code Complete, значительно улучшило мои представления о разработке классов.

До сегодняшнего дня я не знал, что такое ADT (абстрактный тип данных), и теперь я знаю, как разрабатывать классы, соответствующие инкапсуляции.

...