Рефакторинг кода
87C# --- Руководство по C# --- Рефакторинг кода
При создании приложений многие разработчики сначала заботятся об их функциональности, а когда она обеспечена, переделывают приложения таким образом, чтобы они были более управляемыми и удобочитаемыми. Это называется рефакторингом (refactoring). Под рефакторингом понимается процесс переделки кода для повышения удобочитаемости и производительности приложений, а также обеспечения безопасности типов и приведения кода к такому виду, в котором он лучше соответствует рекомендуемым приемам объектно-ориентированного программирования. К счастью, теперь в Visual Studio 2010 можно достаточно хорошо автоматизировать этот процесс.
За счет использования меню Refactor (Рефакторинг), которое становится доступным при открытом файле кода, а также соответствующих клавиатурных комбинаций быстрого вызова, смарт-тегов (smart tags) и/или вызывающих контекстные меню щелчков, можно существенно видоизменять код с минимальным объемом усилий. В следующей таблице перечислены некоторые наиболее распространенные приемы рефакторинга, которые распознаются в Visual Studio 2010:
Прием рефакторинга | Описание |
---|---|
Extract Method (Извлечение метода) |
Позволяет определять новый метод на основе выбираемых операторов программного кода |
Encapsulate Field (Инкапсуляция поля) |
Позволяет превращать общедоступное поле в приватное, инкапсулированное в форму свойство C# |
Extract Interface (Извлечение интерфейса) |
Позволяет определять новый тип интерфейса на основе набора существующих членов типа |
Reorder Parameters (Переупорядочивание параметров) |
Позволяет изменять порядок следования аргументов в члене |
Remove Parameters (Удаление параметров) |
Позволяет удалять определенный аргумент из текущего списка параметров |
Rename (Переименование) |
Позволяет переименовывать используемый в коде метод, поле, локальную переменную и т.д. по всему проекту |
Чтобы увидеть процесс рефакторинга в действии, давайте модифицируем метод Main(), добавив в него следующий код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Настраиваем консольный интерфейс (CUI)
Console.Title = "Мое приложение";
Console.ForegroundColor = ConsoleColor.Yellow;
Console.BackgroundColor = ConsoleColor.Blue;
Console.WriteLine("Привет, это мой проект!");
Console.BackgroundColor = ConsoleColor.Black;
Console.ReadLine();
}
}
}
В таком, как он есть виде, в этом коде нет ничего неправильного, но давайте представим, что возникло желание сделать так, чтобы данное приветственное сообщение отображалось в различных местах по всей программе. В идеале вместо того, чтобы заново вводить ту же самую отвечающую за настройку консольного интерфейса логику, было бы неплохо иметь вспомогательную функцию, которую можно было бы вызывать для решения этой задачи. С учетом этого, попробуем применить к существующему коду прием рефакторинга Extract Method (Извлечение метода).
Для этого выделите в окне редактора все содержащиеся внутри Main() операторы, кроме последнего вызова Console.ReadLine(), и щелкните на выделенном коде правой кнопкой мыши. Выберите в контекстном меню пункт Refactor --- Extract Method (Рефакторинг --- Извлечь метод).
В открывшемся далее окне назначьте новому методу имя MyConfigCUI():

После этого метод Main() станет вызывать новый только что сгенерированный метод MyConfigCUI(), внутри которого будет содержаться выделенный ранее код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Настраиваем консольный интерфейс (CUI)
MyConfigCUI();
Console.ReadLine();
}
private static void MyConfigCUI()
{
Console.Title = "Мое приложение";
Console.ForegroundColor = ConsoleColor.Yellow;
Console.BackgroundColor = ConsoleColor.Blue;
Console.WriteLine("Привет, это мой проект!");
Console.BackgroundColor = ConsoleColor.Black;
}
}
}
Нетрудно заметить, подобные мастера позволяют довольно легко производить рефакторинг кода не только на одной странице, но и во всем приложении. К числу других доступных возможностей относятся:
переименование методов, локальных переменных, полей и множества других элементов
извлечение методов из выделяемых фрагментов кода
извлечение интерфейсов на основе набора существующих членов типа
превращение локальных переменных в параметры
переименование или переупорядочивание параметров
Предлагаемые Visual Studio 2010 возможности рефакторинга представляют собой поистине замечательный способ для получения более чистого, удобочитаемого и лучше структурированного кода. :)