Рефракторинг кода в VS.NET 2005…
Апрель 30, 2007 — seregaborzovКонечно, рефракторинг в VS оставляет желать лучшего, особенно если сравнивать допустим с NetBeans (бесплатная IDE для Java программинга). Но как говорится, мал золотник да дорог. Так что рефракторим, что дают.
Кликаешь правой кнопкой на коде и в меню Refractor видишь следующие пункты:
- Rename
- Extract Method
- Encapsulate Field
- Extract Interface
- Promote Local Variable to Parameter
- Remove Parameters
- Reorder Parameters
Пройдемся по подробнее:
Rename - он и в России ринэйм. Переименовывает все что душе угодно. При этом ты можешь проследить за тем, что конкретно переименовывается, если поставишь флажок Preview Reference Changes.
Extract Method - в процессе создания какого-либо метода, он может получиться очень большим, что влиеят на читабельность. Extract Method позволяет “дробить методы” на более мелкие составные части. Рассмотрим как работает эта опция:
К примеру у тебя есть такой метод:
public void setColor(String color) { this.color = color; Console.WriteLine("LightCar - " + color); }
Конечно, здесь и рефракторить нечего, но представь, что в метод ты передаешь туеву кучу параметров и все их присваиваешь полям объекта(this. this. this. ….). От этой громоздкости можно уйти, выделив this.color = color; (и др.) и нажав Extract Method. В итоге код переписывается:
public override void setColor(String color) { ExtractMethod(color); Console.WriteLine("LightCar - " + color); } private void ExtractMethod(String color) { this.color = color; }
Пример конечно все равно не удачный, ну я думаю, ты понял, чем тебе может помочь Extract Method.
Encapsulate Field - если помнишь инкапсуляция - это сокрытие реализации класса и отделение его внутреннего представления от внешнего. Все знают, что поля класса должны быть private, а доступ к ним должен обеспечиваться с помощью свойств, которые реализуются с помощью геттеров и сеттеров(немного т?). Вот для этого и применяется Encapsulate Field:
string marka; public string Marka { get { return marka; } set { marka = value; } }
Набрав только string marka - get and set sgenerirovalis automaticho =)
Extract Interface - иногда при реализации нескольких классов получается что их структура идентична. Или создав родительский класс возникает желание создать интерфейс, который будет описывать структуру этого класс. В этом и поможет Extract Interface. Рассмотрим класс Car:
class Car { int speed; string c; public virtual void setColor(String color) { c = color; Console.WriteLine(color); } public int Speed { set { speed = value; } get { return speed; } } }
Если необходимо создать интерфейс на основе этого класса, то выдели весь класс и нажми Extract Interface. В итоге рефрактор создаст для тебя отдельный файл ICar.cs в котором будет описываться структура Car:
using System; namespace ConsoleApplication1 { interface ICar1 { void setColor(string color); int Speed { get; set; } } }
А наш базовый Car перепишется на:
class Car : ConsoleApplication1.ICar1 { int speed; string c; public virtual void setColor(String color) { c = color; Console.WriteLine(color); } .... }
Promote Local Variable to Parameter - присваивает локальную переменную параметру. Есть метод Адд():
public int Add(int i, int j) { int k = 0; k = i + j; return k; }
От строки int k = 0, можно избавиться выделив ее и нажав Promote Local Variable to Parameter, в итоге получаем более компактный код:
public int Add(int i, int j, int k) { k = i + j; return k; }
Remove Parameters - удаление ненужных параметров. Операция почти обратная по смыслу предыдущей. Так же выделяете метод и в вспомогательном окне удаляете все ненужное.
Reorder Parameters - переопределение параметров, то есть А становится В, а B становится A - “обмен местами”.
В итоге: рефракторинг кода как таковой имеет несколько другой смысл - читай “Рефракторинг” Фаулера или “Совершенный код” Макконнела . А все эти фичи от VS направлены больше на повышение удобочитаемости кода и облечение труда кодера.
По материалам: http://www.devx.com/
…а музыка была: Тату - Sacrifice
Blogus tags : refractoring,VS,NET
Tags: refractoring VS NET



