La refactorización siempre busca que el código se mantenga sencillo de entender y fácil de revisar, modificar y mantener. En el caso de la técnica replace method o reemplazar método, su objetivo es el mismo, hacer que cada método sea más eficiente.
Como programadores, nuestro objetivo debe ser velar porque el código, internamente, tenga estructuras sencillas, breves, cuya finalidad sea fácil de comprender para cualquiera que lo observe.
Aunque a simple vista aplicar la técnica replace method o reemplazar método, puede parecer un tanto complejo, es importante tenerla presente cuando trabajemos con programación orientada a objetos (POO)
Si en el proyecto que estamos desarrollando, un método se ha vuelto muy extenso y tiene numerosas variables locales o internas, es un buen momento para que consideremos el uso de la técnica replace method.
Esto nos permitirá convertir el método en una clase independiente y poder manejar todo su contenido de una manera más sencilla, logrando un código que cumpla su objetivo sin que su extensión sea mayor de lo usual.
Veamos un código que puede servir para ejemplificar la esencia de esta técnica:
public class AntesReplace {
public double Peso() {
double PesoPrimario = 1;
double PesoSecundario = 2;
double PesoTerciario = 3;
double PesoMedio = PesoPrimario + PesoSecundario + PesoTerciario;
return PesoMedio;
}
}
Vemos una clase con un método que tiene varias variables internas.
Aplicando la técnica replace method, en primer lugar crearemos una clase como sigue:
package replace;
public class CalcularPrecio {
private double Peso1;
private double Peso2;
private double Peso3;
public CalcularPrecio(double d, double e, double f) {
this.Peso1 = d;
this.Peso2 = e;
this.Peso3 = f;
}
public double compute() {
double PesoMedio = Peso1 + Peso2 + Peso3;
return PesoMedio;
}
}
Y luego crearemos un objeto de esta nueva clase, para que efectivamente se ejecute la tarea que acabamos de programar:
package replace;
public class DespuesReplace {
public static double PesoMedio() {
return new CalcularPrecio(0.9, 8.5, 5.6).compute();
}
public static void main(String[] args) {
System.out.println(PesoMedio());
System.out.println(new CalcularPrecio(1.0, 2.3, 2.7).compute());
}
}
Aunque en un principio esto puede resultarnos un tanto confuso, básicamente se trata de hacer que cada fragmento del código sea breve, ejecute una única tarea y pueda usarse en múltiples lugares del proyecto.