ConstructiCat Logo
CodeBust.
Browse section ▾

Reemplazar Parámetro con Métodos Explícitos.

Problem

Un método está dividido en partes, cada una de las cuales se ejecuta dependiendo del valor de un parámetro.

Solution

Extrae las partes individuales del método en sus propios métodos y llámalos en lugar del método original.

##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

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.

##Benefits

  • Mejora la legibilidad del código. Es mucho más fácil entender el propósito de startEngine() que el de setValue("engineEnabled", true).

##How to Refactor

  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.