Tag Archives: Refactoring

Cuaderno: Refactoring. Malos olores entre clases: Clases librería
Introducción Una aplicación moderna utilizará clases librería. En ocasiones estas nos ponen en un dilema. Queremos que la librería sea diferente, pero no queremos cambiarla. Incluso cuando es posible cambiar de librería, conlleva riesgos: Afecta a otros clientes y ello implica rehacer nuestros cambios para futuras versiones de la librería. Incomplete Library Class Síntomas Estás […]

Cuaderno: Refactoring. Malos olores entre clases: Alojando el cambio
Introducción Algunos problemas se vuelven más aparentes cuando intentas cambiar el código. Lo ideal es que una decisión de cambio afecte sólo a un único lugar. Cuando esto no sucede, es una señal de duplicidad de código. Detectar estos problemas suele tener otros beneficios como facilitar la testeabilidad del código. Los malos olores relativos al […]

Cuaderno: Refactoring. Malos olores entre clases: Responsabilidad
Introducción El equilibrio en la responsabilidad entre objetos es difícil de conseguir. Una de las virtudes de la refactorización es que nos permite experimentar con diferentes ideas de una forma segura y nos permite cambiar de idea. Hay herramientas que nos ayudan a decidir como trabajan los objetos entre sí, como los patrones de diseño […]

Cuaderno: Refactoring. Malos olores entre clases: Herencia
Introducción La relación entre una clase y su subclase suele comenzar siendo simple pero se va volviendo más complicada con el paso del tiempo. Una subclase a menudo depende de su generalización más estrechamente que una clase ajena, pero esto puede ser demasiado. La clave es decidir entre lo que una clase es y lo […]

Cuaderno: Refactoring. Malos olores entre clases: Datos
Introducción Los DTOs son una oportunidad. Si los datos forman un buen conjunto, normalmente podemos encontrar un comportamiento que pertenezca a la clase. Los malos olores resultantes de un mal uso de las estructuras de datos son: Primitive Obsession Data Class Data Clump Primitive Obsession Síntomas Uso de primitivos o casi primitivos (int, float, String, […]

Cuaderno: Refactoring. Malos olores dentro de una clase: Lógica condicional
Introducción Es difícil de razonar ya que tenemos que considerar múltiples caminos a través del código. Es tentador añadir casos de uso especiales en lugar de desarrollar un caso de uso general. A veces es usada como un mal sustituto de mecanismos orientados a objetos. Los malos olores derivados de un mal uso de la […]

Cuaderno: Refactoring. Malos olores dentro de una clase: Duplicación
Introducción La duplicación causa los siguientes problemas: Hay más código que mantener. Las partes que varían están enterradas bajo las partes que se mantienen fijas. Variaciones en el código a menudo esconden similitudes más profundas. Hay tendencia a reparar un bug en un lugar y dejar otros idénticos sin reparar en otro sitio. La duplicación […]

Cuaderno: Refactoring. Malos olores dentro de una clase: Complejidad innecesaria
La complejidad innecesaria del código puede presentarse en los siguientes malos olores: Dead Code Speculative Generality Introducción Sigue el principio YAGNI (You Aren’t Gonna Need It). Dead Code Qué hacer Elimina el código no utilizado y los tests asociados. Recompensas Reduce el tamaño. Mejora la comunicación. Mejora la simplicidad. Contraindicaciones No elimines código que pueda […]

Cuaderno: Refactoring. Malos olores dentro de una clase: Nombres
Introducción Algunas herramientas para escoger nombres pueden ser: Diccionarios de proyectos. Vocabularios del dominio, ontologías y lenguajes. Metáforas de Xtreme Programming. Los buenos nombres cumplen varias funciones: Proveen de un vocabulario para discutir nuestro dominio. Comunican intención. Aportan expectativas sobre cómo funciona el sistema. Se apoyan entre sí en un sistema de nombres. Para elegir […]

Cuaderno: Refactoring. Malos olores dentro de una clase: Olores leves
Los malos olores leves que podemos encontrar dentro de una clase son: Comments (comentarios) Long Method (método largo) Large Class (clase larga) Long Parameter List (lista de parámetros larga) Comments Qué hacer Cuando un comentario explica un bloque de código, utiliza Extract Method para encapsular dicho bloque de código y aportar semántica. El comentario suele […]