Выделение метода заключается в выделении из длинного и/или требующего комментариев кода отдельных фрагментов и преобразовании их в отдельные методы, с подстановкой подходящих вызовов в местах использования. В этом случае действует правило: если фрагмент кода требует комментария о том, что он делает, то он должен быть выделен в отдельный метод. Также правило: один метод не должен занимать более чем один экран (25-50 строк, в зависимости от условий редактирования), в противном случае некоторые его фрагменты имеют самостоятельную ценность и подлежат выделению. Из анализа связей выделяемого фрагмента с окружающим контекстом делается вывод о перечне параметров нового метода и его локальных переменных.
Перемещение метода (Move Method)
Перемещение метода применяется по отношению к методу, который чаще обращается к другому классу, чем к тому, в котором сам располагается.
Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)
Условный оператор с несколькими ветвями заменяется вызовом полиморфного метода некоторого базового класса, имеющего подклассы для каждой ветви исходного оператора. Выбор ветви осуществляется неявно, в зависимости от того, экземпляру какого из подклассов оказался адресован вызов.
|
|
Основные принципы:
- вначале следует создать базовый класс и нужное число подклассов;
- в некоторых случаях следует провести оптимизацию условного оператора путем «Выделения метода»;
- возможно использование «Перемещения метода», чтобы поместить условный оператор в вершину иерархии наследования;
- выбрав один из подклассов, нужно конкретизировать в нём полиморфный метод базового класса и переместить в него тело соответствующей ветви условного оператора;
- повторить предыдущее действие для каждой ветви условного оператора;
- заменить весь условный оператор вызовом полиморфного метода базового класса.
Проблемы, возникающие при проведении рефакторинга
- проблемы, связанные с базами данных;
- проблемы изменения интерфейсов;
- трудности при изменении дизайна.
Средства автоматизации рефакторинга
Технические критерии для инструментов рефакторинга:
- базы данных программы;
- деревья синтаксического разбора;
- точность.
Практические критерии для инструментов рефакторинга:
- скорость;
- отмена модификаций;
- интеграция с другими инструментами.