Reemplazar Parámetro con Métodos Explícitos.
Problema
Un método está dividido en partes, cada una de las cuales se ejecuta dependiendo del valor de un parámetro.
Solución
Extrae las partes individuales del método en sus propios métodos y llámalos en lugar del método original.
##Ejemplo
Antes
void setValue(String name, int value) {
if (name.equals("height")) {
height = value;
return;
}
if (name.equals("width")) {
width = value;
return;
}
Assert.shouldNeverReachHere();
}Después
void setHeight(int arg) {
height = arg;
}
void setWidth(int arg) {
width = arg;
}##Por qué refactorizar
Un método que contiene variantes dependientes de un parámetro ha crecido enormemente. En cada rama se ejecuta código no trivial y las nuevas variantes se añaden muy rara vez.
##Ventajas
- Mejora la legibilidad del código. Es mucho más fácil entender el propósito de
startEngine()que el desetValue("engineEnabled", true).
##Cómo refactorizar
-
Para cada variante del método, crea un método separado. Ejecuta estos métodos según el valor de un parámetro en el método principal.
-
Encuentra todos los lugares donde se llama al método original. En esos lugares, coloca una llamada a una de las nuevas variantes dependientes del parámetro.
-
Cuando no queden llamadas al método original, elimínalo.