2008-10-02 3 views
22

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

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

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

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

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

ответ

23

Реальное разоблачение мне было Refactoring: Improving the Design of Existing Code:

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

Refactoring http://ecx.images-amazon.com/images/I/519XT0DER6L._SL160_PIlitb-dp-arrow,TopRight,21,-23_SH30_OU01_AA115_.jpg

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

+0

Мне нравится эта книга! – 2008-10-02 12:34:52

5

Вот обзор на слэш точка книги под названием Clean Code.

Книга, по-видимому, немного сухая, но очень хорошая.

+0

Эй, это мой отзыв! Проблема с книгой в том, что она ориентирована на Java. Но, в общем, дядя Боб знает, о чем он говорит, и долго это делал. – 2008-10-02 12:50:05

+0

@Cory Foy Хороший обзор Я серьезно разбираюсь в покупке книги на ее основе. Однако я пытаюсь заставить свою компанию сначала купить его для меня :) – 2008-10-02 15:44:22

11

Jeff Atwood сделал nice blog post on refactoring and code smells, вы можете проверить это.

Рефакторинг кода в .NET занимает некоторое время. Вы должны знать некоторые объектно-ориентированные design principles (или design techniques), чтобы refactor effectively и mercilessly.

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

1
  • Re-factor вы код, когда это вызывает проблемы. Любые проблемы будут: производительность, масштабируемость, интеграция, поддержка - все, что заставляет вас тратить больше времени на это, когда вам нужно. Это не сломано, не исправляйте это, даже если вы не верите, что он чист или соответствует современным стандартам.
  • Не тратьте слишком много времени на то, чтобы сделать код идеальным. Вы никогда не достигнете совершенства, но вы могли бы потратить много времени, пытаясь это сделать. Запомните закон уменьшения прибыли.
  • Внутри проекта только рефакторинг кода, когда вы на самом деле работаете с функциональностью, которая зависит от него. То есть если у вас есть история пользователей для итерационных вызовов для «изменения механизма загрузки» или «исправления ошибки при загрузке файла», вы можете повторно разложить код загрузки файла. Однако, если ваша история пользователя о «обновлении дизайна пользовательского интерфейса загрузки файлов» не входит в бизнес-логику.
1

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

Нет ответа «да» или «нет». DDD рекомендует реорганизовать его, если тест представляет правило buisiness. Рефакторинг не является (только) о повторном использовании, а о том, чтобы сделать намерения ясными.

1

Working Effectively with Legacy Code является одной из лучших книг, которые я видел на эту тему.

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

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

0

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

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

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

0

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

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

1

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

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

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

Одна из ситуаций, когда я регулярно меняю рефакторинг, - это до, реализующий элемент кода.

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

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

Смежные вопросы