sourcemaking patterns guru book behavioral design-patterns refactoring resources

design-patterns - patterns - refactoring guru



Mejores prácticas para desarrollar código amigable con Refactor (6)

Siendo un desarrollador de Java en un ciclo de desarrollo ágil, aprendí que es esencial asegurarme de que diseñe mis clases de manera que pueda refactorizarlas fácilmente sin mucho dolor. Quiero saber cuáles son las mejores prácticas que sigues en tu ciclo diario de diseño / desarrollo que te ayudan a realizar refactorizaciones fácilmente.
Por ejemplo, sé que debería ocultar los detalles de implementación detrás de una interfaz. Así que ese evento si estoy cambiando la implementación mañana, no estoy alterando el código del cliente que consume estas API. De manera similar, debería usar "patrón de diseño de fábrica" ​​siempre que sea posible para que el cambio de las clases de implementación se pueda controlar desde una clase de fábrica en lugar de descubrir todos los lugares y cambiarlos.
Del mismo modo, me gustaría saber cuáles son las mejores prácticas que estás siguiendo y que me ayudarán.


Debería tener un conjunto de pruebas unitarias que puedan demostrar que la base de código no se vio afectada (involuntariamente) cada vez que se refactorice.


Esto puede parecer un poco de razonamiento circular, pero creo que es cierto en mi experiencia:

Refactorizarlo mucho

Muchas de las respuestas aquí (especialmente un conjunto de pruebas sólido) son buenos consejos y ayudan mucho, así que déjenme ser claro al decir que también estoy a favor de esas medidas preventivas.

Al principio, siempre es fácil cambiar (cuando es pequeño). Entonces, generalmente tienes que atravesar algunos momentos difíciles de refactorización antes de tener un gran avance y obtener algo realmente flexible.


Mi respuesta se refiere a lo que constituye un buen resultado después de la refactorización.

Los métodos deberían ser ...

  • corto - nunca deberían ser más que una pantalla llena de código.
  • hacer a lo sumo una cosa:
    • calcule un valor
    • prueba y rama
    • Iniciar sesión
    • guardar y lanzar excepción
  • tener un único punto de salida, mi razonamiento ...
    • Si luego necesita volver y hacer algo con el valor de retorno, todo sucede en un solo lugar.
    • Fácil de establecer un punto de interrupción e inspeccionar el valor devuelto ...
    • Cantidades a SECO .

No copie y pegue (también conocido como DRY: No repetir). Cuando una funcionalidad dada se implementa en no más de un lugar, entonces es más fácil volver a implementar esa funcionalidad.


Use TDD. Seriamente. Los exámenes de escritura mientras escribe sus clases lo obligan a pensar cómo serán utilizados por los demás. Tiende a escribir mejores abstracciones cuando haces esto.

Libros enteros han sido escritos sobre este tema:

  • Código completo
  • Trabajando Efectivamente con Legacy Code
  • Código limpio
  • Refactoring
  • Refactorización de patrones
  • Principios, patrones y prácticas ágiles

Cada uno de ellos toca este tema de una manera única.