¿Que son las técnicas de Refactoring?
Las técnicas de Refactoring fueron puestos en evidencia por Martin Fowler en su libro: Refactoring “Improving the desing of existing code”. Si tienen la suerte de poder llegar a leer ese libro no se lo olvidarán jamás. Estoy 100% convencido, que después de su lectura, la forma en que escribirán código será totalmente diferente. Voy a empezar explicando los conceptos básicos:
Refactoring: “es una técnica disciplinada para reestructurar una porción de código existente, alterando su estructura interna sin cambiar su comportamiento exterior”. Esta definición es el núcleo de lo que significa Refactoring. Para llevar el refactoring a cabo, se van aplicando una serie de cambios pequeños que en su conjunto cambian la estructura sin afectar el resultado final. A cada uno de estos pequeños cambios llamaremos Refactoring.
Antes de seguir con los conceptos que rodean a las técnicas de refactoring, voy a exponerles un ejemplo corto y sencillo para tener una idea de que es lo que implica el refactoring, resultando un mejor entendimiento de su filosofia.
Ejemplo de Refactoring
Supongamos que tenemos una clase sencilla como la siguiente:
public class NormalFieldClass {
public String name;</p>
<p style="text-align: justify;">public static void main(String[] args){
NormalFieldClass example1 = new NormalFieldClass();
example1.name = "myName";
System.out.println("My name is " + example1.name);
}
}
Nuestra variable nombre es de carácter público. Eso permite a cualquier otra clase poder acceder directamente al valor de nuestra variable para leer o escribir sobre ella. Esta forma de publicación de variables no es una buena práctica. Debemos pensar siempre que nuestro código puede ser consumido por un tercero. Entonces que podría llegar a pasar si nosotros queremos tener cierta restricción sobre el valor de esa variable (como por ejemplo que tenga nombre de personas), y un tercero llama a nuestra clase y guarda cualquier cadena que no sea un nombre de persona. En ese caso estaremos perdidos.
Si bien el ejemplo es muy burdo, la intención es mostrar que pueden existir escenarios donde nuestro código no esté bien diseñado por no seguir las buenas prácticas. Para solucionar este problema, vamos a introducir una técnica de refactoring llamada Field Encapsulation. Esta es bien sencilla para que no perdamos el foco de nuestro ejemplo, que es poder entender la filosofia Refactoring.
Aplicando Field Encapsulation nuestra clase quedaría de la siguiente manera:
public class EncapsulatedFieldClass {
private String name;</p>
<p style="text-align: justify;">public String getName()
{
return name;
}</p>
<p style="text-align: justify;">public void setName(String newName)
{
name = newName;
}</p>
<p style="text-align: justify;">public static void main(String[] args)
{
EncapsulatedFieldClass example1 = new EncapsulatedFieldClass();
example1.setName("myName");
System.out.println("My name is " + example1.getName());
}
}
Como resultado final, nuestra clase encapsula la propiedad name y hace público los getteres y setteres para acceder a ella. De esta manera, cualquier restricción que querramos en la lectura de la propiedad o en la escritura la podremos escribir en los métodos getteres o setteres segun corresponda. Luego de mirar las clases pueden pensar: “bueno pero al final se agregaron 2 metodos nuevos, se cambio la visibilidad de la propiedad pero en definitiva el resultado final es el mismo!”. Eso es exactamente lo que queria que piensen!, ya que es una de las principales razones de ser del Refactoring. La estructura interna cambia sin afectar el comportamiento exterior. Pero este no es el final, ya que nuestro código queda preparado para una mejor lectura y la posibilidad de poder crear validaciones dentro de los getteres o setteres.
La técnica expuesta en el ejemplo es muy básica y hoy en dia todo programador debería tenerla incorporada como concepto básico de la POO, pero sirve para ilustrar cuál es la motivación de los refactorings.
¿Cuando Aplicar las técnicas de Refactoring?
Las técnicas que vayamos aprendiendo e interiorizando se pueden aplicar desde un primer momento anticipándonos a los cambios, pero es aconsejable llevarlas a cabo una vez que el código ya esté escrito (al menos que se tengan algunos años de práctica). Esto facilita mucho las cosas, ya que no tenemos nuestra mente ocupada en como debemos plasmar la lógica dentro del código. Este ya esta desarrollado y solo debemos mirar los puntos a mejorar y optimizar. Algunas técnicas son muy sencillas y se pueden aplicar de antemano, pero otras es mas fácil de llevarlas a cabo una vez que tenemos algo en concreto sobre donde aplicarlas.
Técnicas
En los siguientes post iremos viendo las distintas técnicas de Refactoring mas complejas hasta llegar a refactorizar Patrones de Diseño.
Esto ha sido todo el Tutorial: Que son las técnicas de Refactoring en Español (I).
No hay artículos relacionados.



