Reactoring no ha muerto


En muchas ocasiones no podemos plantear esa arquitectura soñada o esos patrones de software que tanto nos ayudan a solucionar problemas o retos conocidos, debido a que ya existe un código legacy que debemos mantener, con grandes bloques de código duplicado, deuda técnica, sin adecuadas pruebas unitarias o aun "peor" sin ninguna prueba implementada. Sii como lo oyen. Si bien no podemos hacer un cambio estructural de la solución, si podemos realizar cambios graduales en el código que estamos manteniendo, "Cuidado" garantizando que no se afecte la funcionalidad existente. Para poder realizar esto existe una práctica XP llamada refactoring que consiste en realizar optimizaciones de nuestro código mediante diferentes técnicas. Quiero recopilar algunas técnicas que desde mi punto de vista pueden ser las más sencillas para empezar y que les podrán ayudar cuando asuman el reto de mejorar lo que no recibieron tan bien. Los ejemplos de código fueron tomados de [1] y allí podrán encontrar muchas otras técnicas potentes..

Extract Method: Esta técnica permite extraer un método de un código que ya se encuentra agrupado y que complica sur forma de leerlo:

Ejemplo:

void printOwing() {
  printBanner();

  // Print details.
  System.out.println("name: " + name);
  System.out.println("amount: " + getOutstanding());
}

void printOwing() {
  printBanner();
  printDetails(getOutstanding());
}

void printDetails(double outstanding) {
  System.out.println("name: " + name);
  System.out.println("amount: " + outstanding);
}

Extract Variable: Cuando tenemos expresiones que son complicadas de entender podemos usar esta técnica para poder extraer algunas variables y luego la expresión la evaluamos solo usando estas variables, se darán cuenta de como se simplifica la lectura del código

Ejemplo:

void renderBanner() {
  if ((platform.toUpperCase().indexOf("MAC") > -1) &&
       (browser.toUpperCase().indexOf("IE") > -1) &&
        wasInitialized() && resize > 0 )
  {
    // do something
  }
}

void renderBanner() {
  final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
  final boolean isIE = browser.toUpperCase().indexOf("IE") > -1;
  final boolean wasResized = resize > 0;

  if (isMacOs && isIE && wasInitialized() && wasResized) {
    // do something
  }
}

Extract Class: Esta técnica aunque no es sencilla de implementar nos permite crear un código legible y desacoplado, permitiendo poco a poco que nuestro código sea más modular, fácil de mantener y de alguna forma los patrones de diseño van emergiendo con naturaleza.

Ejemplo:


Rename Method: Esta técnica es muy sencilla de realizar y nos permite hacer nuestro código mucho mas legible o algo conocido como "Clean Code", les recomiendo mucho que antes de realizar este cambio de nombre validen de que parte de su código se esta invocando.... y pues no sobre recomendar, que lo hagan con su IDE de desarrollo preferido ✌

Ejemplo:


Replace Data Value With Object: Muchas veces queremos representar un objeto con un tipo primitivo y esto no es algo recomendado ya que tendríamos que en muchas partes de nuestro código realizar validación de este dato y adicional podemos utilizarlo para almacenar información que no es coherente con el propósito inicialmente creado. Para esto se recomienda utilizar una clase que represente el campo de manera adecuada con sus propiedades respectivas. Vamos al ejemplo para que sea más claro.

Ejemplo:


Comentarios