jueves, 16 de octubre de 2008

Tip Maven2-IntelliJ

Para incluir el código fuente de las librerias que usamos en nuestros proyectos, al generar los archivos del proyecto incluir el siguiente parámetro: -DdownloadJavadocs=true

mvn idea:idea -DdownloadSources=true -DdownloadJavadocs=true



jueves, 14 de febrero de 2008

Métodos Compuestos

Un método compuesto es un método que puede entenderse en segundos.


No es sencillo escribir naturalmente este tipo de métodos desde la primera vez que escribamos cierto código, por lo que es necesario ir hacia atrás y aplicar un poco de Refactoring para lograr los resultados esperados.


Al usar este patrón nuestro código va tender a ser más fácil de usar, leer y extender.


Un método compuesto como su nombre lo indica “esta compuesto” de llamadas a otros métodos, un buen método compuesto tiene código en el mismo nivel de abstracción o detalle, esto es lo más difícil de dominar.


Esto implica aplicar varias veces “Extract Method” hasta lograr que casi todo el método (“o todo!”) cumpla con su labor llamando a otros métodos más pequeños.


La parte más complicada radica en detectar que partes del código se deben incluir en el método extraído.


Si se extrae demasiado código se corre el riesgo de dedicar demasiado tiempo en ubicar un nombre que describa adecuadamente las labores del método, en este caso deshacer los cambios y explorar otras maneras de dividir la funcionalidad.


Una vez terminado el proceso vamos a encontrarnos con un método divido por varios métodos privados, estos métodos deben ser lo suficientemente cortos, no preocupar en las penalidades de performance pues luego se pueden llevar labores de afinamiento.


Si aplicamos este patrón en la misma clase podemos encontrarnos con abundancia de métodos y podemos encontrar oportunidades para extraer subclases.


El nombre del método indicará que es lo que hace, mientras que el cuerpo indica como lo hace, esto nos permite comprender rápidamente el código.


Ejemplo: El siguiente código proviene de una librería para manejo de colecciones:

Vamos a mostrar los pasos necesarios para aplicar este patrón:


El primer cambio sugerido sería cambiar la condición que envuelve todo el método y convertirla en una cláusula de salida:



El paso siguiente es estudiar el código en la mitad del método, este código verifica si la capacidad del arreglo elements es excedido, si esto ocurre el arreglo es expandido por un factor de 10, este número no indica claramente su intención por lo que debe ser convertido en una constante.


Seleccionar el 10 y presionar ctrl.+alt+c (Introduce Constant) en IntelliJ.




Lo siguiente es extraer el código que detecta que el arreglo a alcanzo su máxima capacidad:


A continuación extraer la parte del código que se encarga de hacer crecer el arreglo, en IntelliJ seleccionamos el código y presionamos ctrl.+alt+m:



Finalmente tenemos:



Para finalizar nos enfocamos en la última línea de código:



Aunque es una sola línea de código esta en un nivel de detalle mayor que el resto del código, corregimos esto extrayendo la sección en su propio método, otra vez ctrl+alt+m en IntelliJ:


Notar que el IntelliJ detecta los parámetros que debe tener nuestro método.






Ahora el método solo tiene 5 líneas de código y es mucho más rápido de entender, este es un típico resultado de aplicar Composed Method: