Замена параметра набором специализированных методов.
Problem
Метод разбит на части, каждая из которых выполняется в зависимости от значения какого-то параметра.
Solution
Извлеките отдельные части метода в собственные методы и вызывайте их вместо оригинального метода.
##Example
Before
void setValue(String name, int value) {
if (name.equals("height")) {
height = value;
return;
}
if (name.equals("width")) {
width = value;
return;
}
Assert.shouldNeverReachHere();
}After
void setHeight(int arg) {
height = arg;
}
void setWidth(int arg) {
width = arg;
}##Why Refactor
Метод, содержащий варианты выполнения, разросся до грандиозных размеров. В каждой из таких цепочек выполняется нетривиальный код. При этом новые варианты добавляются очень редко.
##Benefits
- Улучшает читабельность кода. Куда очевидней, что делает метод
startEngine()чемsetValue("engineEnabled", true).
##How to Refactor
-
Для каждого варианта исполнения метода создайте свой метод. Запускайте эти методы в зависимости от значения параметра в основном методе.
-
Найдите все места, где вызывается оригинальный метод. Подставьте туда вызов одного из новых методов в зависимости от передающегося параметра.
-
Когда не останется ни одного вызова оригинального метода, его можно будет удалить.