Как сделать рефакторинг в visual studio

Обновлено: 07.07.2024

Подобно тому, как Resharper выполняет копирование или перемещение типа в другой файл и настраивает все ваши операторы, мне бы хотелось реорганизовать проект VS и узнать все мои ссылки, имена сборок и файл местоположения будут правильно настроены.

Помогает ли Resharper или любые другие инструменты рефакторинга уровня проекта?

Я не уверен, что вы получите все, что захотите, но там много чего. Вы можете сделать три вещи с помощью Resharper, которые помогут с этим:

1) На уровне проекта или решения вы можете щелкнуть правой кнопкой мыши по нему в Visual Studio и выбрать "Код очистки. ", который будет переформатировать все ваши файлы в этом проекте и изменить с помощью операторов и т.д.

2) Вы можете щелкнуть правой кнопкой мыши на каждой зависимости в проекте и выбрать "Найти использование. ", чтобы убедиться, что требуется зависимость.

3) Недавно появились новые функции с Resharper, где вы можете щелкнуть правой кнопкой мыши по проекту и сказать "Найти зависимый код" для кода в других проектах и ​​ассамблях, которые использует выбранный проект, и "Найти ссылочный код" для кода, который ссылается на код в выбранном проекте.

Версия 4.5 ReSharper теперь может указывать даже на публичные элементы, к которым не обращается какой-либо код в решении. Он не удаляет их для вас, но может выделить их, чтобы вы могли сделать это сами. Это предполагает, что у вас есть весь код, который имеет значение в решении. Я считаю, что он также может сказать вам, что конкретный публичный член может быть сделан внутренним, но на самом деле я его еще не видел (я только что обновил его).

Еще в рубрике

Можно ли перемещаться с помощью Resharper/Visual Studio на внешние источники, расположенные на жестком диске в каком-либо каталоге?

Предотвратите перезагрузку ReSharper 9.1 при автоматической установке <> угловых скобок при автозаполнении родового типа

Что такое рефакторинг? Это процесс улучшения читаемости, сложности и производительности кода путем изменения:

  • Внутренняя структура кода.
  • Внешнее поведение кода.

Рефакторинг помогает в:

  • Как изменить структуру кода
  • Как уменьшить длину кода
  • Как преодолеть сложности

Методы

Существует несколько способов эффективного использования рефакторинга над вашим кодом, эти методы уже доступны в Visual Studio:

  • Метод извлечения
  • Извлечь интерфейс
  • переименовывать
  • Продвигать переменную в параметр
  • Инкапсулировать поле
  • Изменение подписи
  • Создать метод заглушки

Метод извлечения

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

1. Любая локальная переменная, которая определена перед выбранным кодом, но используется в ней, становится входным параметром.
2. Любая такая переменная типа локального значения, которая изменяется выбранным кодом, будет преобразована в параметр сравнения по ссылке (с использованием квалификатора ref).
3. Если выбранный код не использует какие-либо переменные-члены, он будет извлечен в статический метод.

Выберите любой блок кода из вашего сегмента кода.

Этот блок кода может быть любым условным оператором, таким как IF, может быть оператором цикла, подобным for, может быть методом или всем, что вам нужно реорганизовать внутри вашего сегмента кода.

Давайте обсудим, как рефакторинг с помощью Visual Studio с использованием метода извлечения:

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

2.Вы можете выбрать фрагмент кода и перейти в Edit-> Refactor-> Extract Method.
Он заменит фрагмент кода новым методом, и новый метод будет создан автоматически с помощью этого фрагмента кода.

Переименование

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

Извлечение интерфейса:

Extract Interface создает определение интерфейса из общедоступных методов класса или структуры.

Возьмем пример класса Calculator.

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

Инкапсуляция полей:

Он позволяет создавать свойство вокруг члена класса. Вы можете использовать его для инкапсуляции публичного поля или для открытия частного поля как общедоступного.

Например, предположим, что вы хотите выставить переменную-член test_Number как общедоступное свойство:

Поместите курсор на test_Number и выберите Encapsulate Field . из меню Refactor. Это вызовет диалоговое окно Encapsulate Field.

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

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

После использования рефакторинга инкапсуляции полей вы получите публичное свойство, называемое Number, а публичный член test_Number будет преобразован в частный член:

Изменение подписи:

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

Например, вы хотите изменить метод Add () в этом классе Calculator, чтобы использовать double вместо int parameters.

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

После применения изменения подписи вам необходимо вручную изменить возвращаемый тип метода Add (), чтобы удвоить

Объемное пространство и расширения:

окружение и расширения - это автоматизация ввода кода, а не компоновка кода и структура
Surround с созданием шаблона с держателями пустых мест для обычно используемых операторов (например, foreach или обработка исключений) вокруг выделенного раздела кода.
Важно понимать, что Kill () это не то же самое, что Dispose (). Kill () обрабатывает поток выполнения, такой как завершение работы приложения или своевременное завершение потоков, тогда как Dispose () обслуживает память и управление ресурсами и распоряжается другими ресурсами, которые может иметь класс WorkerThread.
Единственная причина, по которой у вас может быть вызов Dispose () Kill (), является непредвиденным в случае, если клиентский разработчик забывает это сделать

У меня возникли проблемы с поиском контекстного меню правой кнопкой мыши в Visual Studio 2015. Я знаю, что ничего не случилось с моим проектом или файлом, над которым я работаю. Я могу найти контекстное меню рефакторинга правой кнопкой мыши в Visual Studio 2013. Однако в Visual Studio 2015 нет контекстного меню рефакторинга в контекстном меню правой кнопкой мыши.

куда он делся? Как мне его вернуть?

ваше предложение не может включать "Edit - >Refactor".

редактировать Я попытались сбросить настройки visual studio по умолчанию с помощью Tools - >Import и Export Settings, и это также не вернуло меню.

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

используя рефакторинг метода извлечения в качестве примера, вы все равно можете использовать эту функцию, она просто не выполняется так же, как раньше:

Select parts to extract

щелкните правой кнопкой мыши

Right click

Quick actions

Click extract method

Я думаю, что они изменили его, чтобы чувствовать себя более "ReSharper" ey. Все функции еще должна быть там.

вам больше не нужно получать доступ к рефакторингу с помощью щелчка правой кнопкой мыши.

рекомендуется использовать сочетания клавиш в Visual Studio.

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

Ctrl + . сочетание клавиш для извлечения метода в Visual Studio 2015 и далее, Ctrl + M , R больше не работает в новых версиях

В этом руководстве вы узнаете все о рефакторинге исходного кода: преимущества, проблемы, инструменты и методы, а также в чем разница между рефакторингом и техническим долгом.

11 месяцев назад


В этом руководстве вы узнаете все о рефакторинге исходного кода: преимущества, проблемы, инструменты и методы, а также в чем разница между рефакторингом и техническим долгом.

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

В этом руководстве будут рассмотрены следующие темы:

  1. Что такое рефакторинг?
  2. Каковы преимущества рефакторинга?
  3. Технический долг vs рефакторинг
  4. Метрики рефакторинга
  5. Примеры рефакторинга кода
  6. Инструменты рефакторинга кода
  7. Рефакторинг и вызовы для инженеров
  8. Поддержка руководства
  9. Командная поддержка и рефакторинг: спринт или марафон?
  10. Документация и рефакторинг

Что такое рефакторинг?

По словам Мартина Фаулера, автора двух книг по рефакторингу:

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

Каковы преимущества рефакторинга?

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

Например, в 2014 году инженеры Kickstarter столкнулись с проблемой экспоненциального роста числа пользователей, что привело к снижению производительности запросов. В ответ они перенесли запросы MySQL на Redis и сократили типичное время загрузки более чем на 100 мс, что привело к уменьшению дисперсии времени загрузки и в целом более быстрой работе сайта.

Технический долг vs рефакторинг

Проще говоря, рефакторинг — это способ устранения или уменьшения технического долга.

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

рефакторинг

Метрики рефакторинга

Использование метрик позволяет вам расставить приоритеты для основных действий по исправлению, которые вам действительно нужно внести в свой код. Это не дает вам делать все сразу и заставляет фокусироваться в первую очередь на самых важных задачах.

Кроме того, вам нужны метрики, чтобы оценить эффективность рефакторинга исходного кода — речь идет не только об изменении неэффективного кода, но и об изменении неэффективного кода для добавления ценности. Чтобы понять реальную ценность, вам нужны тесты, как модульные (например, количество неудачных модульных тестов), так и функциональные. Другие показатели могут включать меньшее количество ошибок и снижение цикломатической сложности — рефакторинг должен быть направлен на снижение сложности. Методы или функции с высокой сложностью (например, более 350 строк) являются хорошими целями для рефакторинга.

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

Примеры рефакторинга кода

Существует множество примеров рефакторинга кода, но для краткости мы сосредоточимся на нескольких:

Красный, зеленый, рефакторинг

Рефакторинг идет рука об руку с модульным тестированием. Одна из наиболее распространенных форм — разработка через тестирование (TDD), присущая методологии Agile. Вы пишете тесты перед написанием кода. По сути, тесты должны управлять программой, указывая, что должен делать код.

Красный, зеленый, рефакторинг — это пример TDD:

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

Метод извлечения (также известный как функция извлечения)

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

Извлечение переменной

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

Ветвь по абстракции

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

Составной метод

Чрезмерно длинный код трудно понять и изменить. Метод Compose относится к ряду действий, которые можно использовать для оптимизации методов и устранения дублирования кода. К ним относятся Inline Method, Inline Temp, Replace Temp with Query, разделение временных переменных и удаление назначений параметрам.

Инструменты рефакторинга кода

Вам нужны специальные инструменты для рефакторинга? Мартин Фаулер говорит, что автоматизированные инструменты полезны, но не важны. Он отмечает:

Многие языки имеют IDE, которые автоматизируют стандартный рефакторинг. Это действительно ценная часть моего набора инструментов, позволяющая мне быстрее выполнять рефакторинг. Но такие инструменты не являются необходимыми — я часто работаю с языками программирования без поддержки инструментов, и в этом случае я полагаюсь на небольшие шаги и частое тестирование для обнаружения ошибок.

Многие среды разработки автоматизируют механические аспекты рефакторинга. Инструменты рефакторинга ключевого кода:

Рефакторинг и вызовы для инженеров

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

  • Какие задачи получают предпочтение?
  • Какая скорость развития?
  • Чувствуют ли разработчики необходимость быстрой отправки кода?
  • Какие существуют процессы для работы с техническим долгом?
  • Какие виды проверки кода предпринимаются?
  • Имеет ли ваша команда необходимые навыки для рефакторинга?
  • Каковы стандарты компании в отношении документации?

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

Поддержка рефакторинга руководством

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

Легко утверждать, что время, потраченное на рефакторинг, — это время, проведенное вне новой работы.

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

Еще лучше заручиться поддержкой высшего руководства для рефакторинга, подсчитав, сколько времени команда в настоящее время тратит на исправление ошибок или ошибок, возникших из-за проблем в исходном коде. Будьте конкретны — это один час в день? Два часа в день? Ведите записи в течение недели, вы можете быть шокированы, узнав, что ваша команда тратит недели или месяцы каждый год на исправление устаревшего кода.

Командная поддержка и рефакторинг: спринт или марафон?

Рефакторинг сложно продать вашей команде? Люди стонут, когда об этом упоминают? Самый большой показатель успешного рефакторинга — это запланированные, целенаправленные и задокументированные действия. Рон Джеффрис, один из трех основателей методологии экстремального программирования, сравнивает рефакторинг с очисткой поля:

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

Однако он подчеркивает, что исправление плохого кода требует много времени, и придерживается более продуманного подхода, чем простое погружение в изменения:

“Мы улучшаем код, в котором работаем, и игнорируем код, с которым нам не нужно работать. Скорее всего, мы еще вернемся к нему.

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

Инженер по продукту и технический директор Андреас Клингер — поклонник Fix-it Friday.

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

  • Какое исправление кода окажет наибольшее влияние на ваш другой код?
  • Какие исправления принесут наибольшую отдачу?

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

Документация и рефакторинг

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

Документирование вашей работы по рефакторингу ведет к учету времени и предоставляет контекст для будущих членов команды.

Кроме того, задокументируйте свои успехи — каковы были самые большие выгоды от рефакторинга? Могут ли они быть учтены в экспертных обзорах?

Утопаете в коде, который требует рефакторинга и технического долга?

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

Читайте также: