Logotipo de ConstructiCat
CodeBust.
Explorar la sección ▾

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 de setValue("engineEnabled", true).

##Cómo refactorizar

  1. 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.

  2. 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.

  3. Cuando no queden llamadas al método original, elimínalo.