Introducción al artículo de Wulin.com (www.vevb.com): La palabra refactorización fue definida originalmente por Martin Fowler y Kent Beck. Es una modificación que hace que la estructura interna del software sea más fácil de entender y hace que el software sea más fácil de cambiar sin cambiar el comportamiento visible del software ... es una forma restringida de organizar el código y minimizar las posibilidades de generación de errores.
A veces, los programadores vienen a mí y dicen que no les gusta el diseño de algo, y necesitamos darle una reconstrucción integral para corregir los errores en él. Oh. Esto no suena como una buena idea. Y esto no suena como una refactorización ...La palabra refactorización fue definida originalmente por Martin Fowler y Kent Beck. Es una modificación que hace que la estructura interna del software sea más fácil de entender y hace que el software sea más fácil de cambiar sin cambiar el comportamiento visible del software ... es una forma restringida de organizar el código y minimizar las posibilidades de generación de errores.
El resultado de la reconstrucción es que se hacen referencia a los métodos de acceso directo, se eliminan el código duplicado y muerto, lo que hace que el diseño y la lógica sean más claros. Es para usar lenguajes de programación mejor e inteligentes. Es la ventaja de usar la información que conoce ahora, pero el desarrollador en ese momento no lo sabía, o no la usaba. Simplifique continuamente el código para que sean más fáciles de entender. Continuamente hace que sus cambios futuros sean más fáciles y seguros.
Durante este proceso, se encontraron errores y se modificaron errores, lo que no es una reconstrucción. La optimización no es una reconstrucción. Fortalecer la captura de excepciones y agregar código preventivo no es refactorización. Hacer que el código sea más fácil de probar no es una refactorización, aunque la refactorización puede lograr el mismo efecto. Todas estas cosas son beneficiosas. Pero ninguno de estos está refactorizando.
Los programadores, especialmente aquellos que realizan trabajos de mantenimiento, la limpieza del código es una de sus tareas diarias. Este es un trabajo básico y debe hacerse. La contribución de Martin Fowler et al. es formatear los métodos de mejores prácticas para refactorizar el código y archivar los patrones de refactorización efectivos comunes y probados, los objetivos de la refactorización y los pasos de refactorización, para la clasificación de archivo.
La refactorización es simple. Escribir pruebas antes de escribir código tanto como sea posible puede evitar que cometa errores. Ajustes estructurales de pequeña escala, independientes y seguros al código, y pruebanlos después de cada ajuste para garantizar que no cambie las características de comportamiento del código: las funciones son las mismas que antes, pero el código se ve diferente. El modo de refactorización y las herramientas modernas de refactorización IDE hacen que la refactorización sea fácil, segura y económica.
No se refactorice en aras de la refactorización
La refactorización puede considerarse como una medida que puede ayudar a los cambios de su código. La refactorización del código debe hacerse antes de realizar cambios en el código, lo que le permitirá asegurarse de que comprenda el código y sea más fácil y más seguro introducir cambios en el código. Realice una prueba de regresión en su acción de refactorización. Luego haga correcciones o cambios. Prueba de nuevo. Más tarde, se puede refactorizar más código para que su intención de cambio de código sea más clara. Completa prueba de nuevo. Reconstruir y cambiar de nuevo. O cambiar y luego refactor.
No está refactorizando en aras de la refactorización, está refactorizando porque desea hacer otras cosas, y la refactorización puede ayudarlo a lograr estas cosas.
El alcance de la refactorización debe determinarse por los cambios de código o las correcciones de código que necesita implementar: ¿qué debe hacer para hacer que los cambios en el código sean más seguros y más concisos? En otras palabras: no se refactorice en aras de la refactorización. No refactorice el código que no tiene la intención de cambiar o que no cambiará.
Refactorización de rasguños para la comprensión (refactorización de scratch)
El libro de Michael Feather "Trabajar efectivamente con el código heredado" menciona el concepto de refactorización de scratch; Martin Fowler lo llama refactorización para la comprensión. Esto se usa para lidiar con el código (o no puede soportar) que no comprenda, limpiarlos para que pueda comprender mejor lo que hacen antes de modificarlo, y también lo ayudará a depurar estos códigos. Una vez que pueda comprender la verdadera intención de una variable o método, renombrarlos, darles un nombre más apropiado, eliminar el código que no le gusta leer (o encontrar inútil), desmontar declaraciones condicionales complejas y desglosar programas largos en varios mini programas fáciles de entender.
No se preocupe por revisar o probar estos cambios. Esto es para que su progreso de reconstrucción sea rápidamente: esto permite estos códigos y cómo se ejecutan para producir un prototipo rápido pero incompleto en su cerebro. Aprende de él y tíralos. Una breve reconstrucción también puede permitirle probar varios métodos de reconstrucción y aprender más técnicas de reconstrucción. Michael Feathers sugiere que debe prestar atención a las cosas que parecen inútiles o particularmente útiles en el proceso, para que pueda hacer las cosas correctamente después de completar este ejercicio y realmente modificarlas, haga un poco a poco al modificar, prestar atención al método y modificar y probar.
¿Qué es la reconstrucción a gran escala?
Reconstrucción simple pero obvia del código: elimine la duplicación, modifique y cambie las variables y los nombres de métodos para que sea más significativo, refine los métodos para facilitar el código de comprender y reutilizar, simplificar la lógica condicional, reemplazar números sin sentido con variables con nombre y reunir códigos similares. A través de estas refactorizaciones, puede obtener grandes recompensas en términos de comprensión del código y mantenibilidad.
En comparación con estas reconstrucciones más pequeñas en línea, las reconstrucciones de diseño más significativas son significativamente diferentes de ellas: esto es a lo que Martin Fowler se refiere como grandes reconstrucciones. Los cambios grandes y costosos vienen con muchos riesgos técnicos. Este no es un código de limpieza y una mejora del diseño en su proceso de programación: es un rediseño fundamental.
A algunas personas les gusta llamar rediseño o reescribir o reconstruir un sistema o reelaborar un sistema llamado reconstrucción a gran escala. Porque técnicamente, estas no cambian las características funcionales del software: la lógica comercial, la entrada y la salida del software siguen siendo las mismas que antes, pero la implementación del diseño y el código han cambiado. La diferencia entre TI y la reconstrucción convencional parece ser: una es reescribir un código, y el otro es reescribir un sistema. Siempre que lo haga paso a paso, puede llamarlo una reconstrucción, ya sea que esté atrapado en reemplazar un sistema antiguo con nuevo código durante años o transformación a gran escala de la arquitectura del sistema.
La refactorización a gran escala será horrible. Puede llevar semanas, meses (o incluso años) completarse, y debe realizar cambios en muchas partes del software. El software no se ejecutará como resultado, y estos cambios deben lanzarse en varias veces. Debe realizar andamios temporales y soluciones, especialmente cuando usa métodos de desarrollo ágil de ciclo corto. En este momento, un método práctico como Branch by Abstract es útil, lo que puede ayudarlo a administrar los cambios en su código durante un largo período de tiempo.
Y mientras se desarrolla un nuevo código, también debe mantener el código anterior, lo que hace que el control de la versión del código sea muy problemático e inconveniente para cambiar, lo que hace que el código sea muy frágil y fácil de cometer errores, esto va en contra del propósito previsto de la reconstrucción. A veces, esta situación continúa: este proceso de alternar un código nuevo y antiguo nunca se puede completar porque el mejor beneficio se realiza primero, o porque el consultor que inicialmente trajo la idea ha hecho otra cosa, o el presupuesto se ha reducido, y usted odia mantener un proyecto de procrastinación de tal manera.
Estos son refactorizados: los que no son
Es incorrecto incorporar el concepto de reconstrucción en tal desarrollo de proyectos de alta resistencia. Son fundamentalmente otro tipo de trabajo, con costos y riesgos de desarrollo completamente diferentes. Confunde la comprensión de las personas de qué es la reconstrucción y qué puede hacer la reconstrucción.
La refactorización puede y debe integrarse en su proceso de escritura o mantenimiento de su código, como parte integral del desarrollo diario/gestión de calidad, al igual que las pruebas de escritura y las revisiones de código. La refactorización debe completarse en silencio, continuamente y discreto. Requiere que dividamos nuestra energía laboral en él, y debe tener en cuenta su existencia en nuestra evaluación y evaluación de riesgos del período de construcción. Si se hace correctamente, no necesita explicar ni verificar esta parte del trabajo a los extraños.
Tomar unos minutos o una hora o dos para refactorizar es como una modificación en su proceso de desarrollo y es parte del trabajo. Si le lleva días o más, no es una refactorización; Es una reescritura o un rediseño. Si necesita dejar de lado explícitamente una parte del tiempo (o todo el ciclo de sprint) para refactorizar el código, si necesita solicitar la aprobación para limpiar el código, o usar el código como requisito de desarrollo, entonces no está refactorizando, incluso si usa las técnicas y herramientas de refactorización, todavía está haciendo otro tipo de trabajo.
Algunos programadores creen que es su derecho y obligación hacer modificaciones fundamentales y significativas al código, y los redisegarán y reescribirán en nombre de la refactorización, para que no decepcionen sus habilidades en el futuro. Rediseñar y reescribir a veces es lo correcto. Pero por franqueza y claridad, no le dé a estas actividades el nombre de la reconstrucción.