Страница: 1 |
Страница: 1 |
Вопрос: Инструменты рефакторинга
Добавлено: 27.05.12 01:00
Автор вопроса: Programmer
Добрый день!
Опишу тип рефакторинга, который мне нужен.
Изначально имеется один большой сверх-ответственный класс на over 9000 строк. Цель рефаторинга - уменьшить ответственность, разделить класс.
1. Я хочу выделить в нем несколько методов, извлечь их в интерфейс, создать на его основе новый класс и перенести эти методы в него (+добавить virtual).
2. В созданном классе нужно заменить все this и обращения к полям (методам) базового класса на использование объекта, получаемого через конструктор.
3. При этом в исходном классе создается поле (или свойство) только что созданного типа, которое инициализируется в конструкторе с передачей (this) в качестве параметра.
4. Все внешние вызовы выбранных методов рефакторятся для использования этого поля.
Пример до рефакторинга:
...
public void a() {...}
...
}
...
abc x;
x.a();
После:
interface abcI {
void a();
}
class abcIImpl:abcI{
abc _original;
public abcIImpl(abc original)
{
_original = original;
}
public virtual void a() {...}
}
class abc {
...
public abcI Functions {get;set;}
abc()
{
Functions = new abcIImpl(this);
}
...
}
...
abc x;
a.Functions.a();
Бывают готовые инструменты для аналогичных ситуаций?
З.Ы. предпросмотр сообщения не помешал бы...
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #1
Добавлено: 27.05.12 06:38
не думаю что ты найдешь инструмент, решающий твою конкретную задачу. Разве что сам такой напишешь.
Номер ответа: 2
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #2
Добавлено: 27.05.12 14:20
Прикольно было бы - типа extract method, тока extract class
Номер ответа: 3
Автор ответа:
Programmer
Вопросов: 71
Ответов: 246
Профиль | | #3
Добавлено: 06.09.12 23:42
Новый Resharper 7 имеет такую опцию:
http://habrahabr.ru/company/JetBrains/blog/148105/#29