Рефракторинг кода в VS.NET 2005…

Конечно, рефракторинг в VS оставляет желать лучшего, особенно если сравнивать допустим с NetBeans (бесплатная IDE для Java программинга). Но как говорится, мал золотник да дорог. Так что рефракторим, что дают.

Кликаешь правой кнопкой на коде и в меню Refractor видишь следующие пункты:

  1. Rename
  2. Extract Method
  3. Encapsulate Field
  4. Extract Interface
  5. Promote Local Variable to Parameter
  6. Remove Parameters
  7. 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 : ,,

Tags:

Опубликовано в .NET.

Ответить