A menudo escuché de profesionales blog algo como la refacturación de su código cada vez que tiene la oportunidad. ¿Qué es exactamente? ¿Reescribiendo tu código en líneas más simples y menos? ¿Cuál es el propósito de hacer esto?"refactor de refactorización refactoriza su código". ¿Qué significa esto exactamente y por qué hacerlo?
Respuesta
Refactoring código es un proceso de limpieza de su código, reduciendo el desorden y mejorando la legibilidad sin causar efectos secundarios o cambios en las características.
Básicamente, se refactoriza aplicando una serie de reglas de cambio de código que mejoran la legibilidad del código y la reutilización, sin afectar la lógica.
Pruebe siempre la unidad antes y después de la refactorización para asegurarse de que su lógica no se vea afectada.
Este Wikipedia article le dará una idea de los tipos de cosas incluidas en el concepto general de Refactorización.
La idea es adaptar/evolucionar su código sobre la marcha. Cosas simples pueden ser cambiar el nombre de las variables o los parámetros del método, pero otros pueden ser pasar un parámetro adicional o soltar uno, o cambiar su tipo. El modelo de datos también puede evolucionar. etc.
menudo refactorización, mano a mano funciona con la unidad de pruebas de, por lo que el riesgo de "romper algo" se ve compensado por el hecho de que un asunto tan probable puede ser descubierto por la prueba automática (proporcionar una buena cobertura y casos de prueba relevantes ...).
En pocas palabras, la capacidad de refactorización (y, por cierto, la mayoría de IDE o complementos para los IDE, ofrecen diversas herramientas que hacen que la refactorización sea más fácil y menos propensa a errores) permite escribir más rápidamente sin hacer hincapié en algunas decisiones ("si este objeto incluye una matriz o una lista, etc ...", dejando que el programador modifique algunas de estas decisiones según los tiempos, y con la información adicional que ofrece tener una solución viable, si no perfecta. Consulte un concepto relacionado: agile development.
Cuidado, refactorización no le da licencia para comenzar la codificación sin poner ningún pensamiento en el diseño, en el modelo de objetos, las API, etc., sin embargo, disminuye la rigidez de algunas de estas decisiones.
El código de refactoreo generalmente significa tomar código que ha sido parcheado varias veces y volver a escribirlo para que se tengan en cuenta las necesidades de los parches posteriores.
Martin Fowler probablemente haya hecho más para popularizar la refactorización, pero creo que los buenos desarrolladores siempre han hecho este tipo de reestructuraciones. Consulte Fowler's refactoring web site, y su 1999 Refactoring, que es una excelente introducción y catálogo de refactorizaciones específicas utilizando Java.
Y veo que es coautor de la nueva marca Refactoring, Ruby Edition, que debería ser un gran recurso.
Me parece que la limpieza regular de su código de este modo lo hace mucho más claro y más fácil de mantener.
Para tomar un ejemplo, escribí una pequeña biblioteca cliente (Java 1.6) para acceder a servicios web remotos (utilizando el estilo arquitectónico REST). La mayor parte de esta biblioteca está en un archivo fuente, y aproximadamente la mitad de eso trata de los servicios web, mientras que la otra mitad es un simple caché en la memoria de las respuestas (para el rendimiento). Con el tiempo, ambas mitades han crecido en funcionalidad, hasta el punto en que el archivo fuente se estaba volviendo demasiado complejo. Así que hoy usé la refactorización de "Extract Class" de Fowler para mover la lógica de caché a una nueva clase.Antes de eso tuve que hacer algunos "métodos de extracción" para aislar la lógica de almacenamiento en caché. En el camino hice algunos "Renombrar métodos" y una "Introducir variable explicativa".
Como han señalado otras personas, es muy importante tener un buen conjunto de pruebas de unidad para aplicar después de realizar cada cambio. Ayudan a garantizar que no está introduciendo nuevos errores, entre otras cosas buenas.
En pocas palabras, refactorizar significa mejorar el diseño y/o implementación del software, generalmente sin cambiar su comportamiento. Esto se hace normalmente para hacer que el código sea más fácil de entender y trabajar con el futuro, haciendo que el desarrollo futuro sea más rápido y menos propenso a errores.
La refabricación es una inversión a largo plazo en su código, ya que no afecta la "apariencia" externa del software, a menudo hay presión (de la administración, etc.) para "simplemente hacer que funcione y moverse". a lo siguiente ". Aunque a veces esto puede ser una decisión acertada, dependiendo de los impulsores del negocio, una base de código que sufre cambios pero que nunca se refactoriza se descompondrá en un caos difícil (consulte también Technical Debt).
En concreto, las principales razones para perfeccionar por lo general son los siguientes:
- Deshacerse de código duplicado
- Romper un método de largo en trozos más pequeños mediante la extracción de nuevos métodos de las secciones del método ya
- Romper una clase que tiene demasiadas responsabilidades en clases o subclases más pequeñas y más específicas
- Mover métodos de una clase a otra. A menudo, esto se hace para que los métodos residan en la misma clase que los datos en los que operan.
+1 por mencionar Deuda técnica. – TrueWill
En términos simples, el código de refactorización está optimizando el código. El criterio para saber qué es el "mejor" código está abierto a mucha interpretación, ya que existen varios estilos y patrones de codificación. Una idea central con la refactorización es la pregunta de "¿Podría este código mejorarse?" Algunos ejemplos de ese criterio pueden incluir escalabilidad, facilidad de mantenimiento, readabilidad, rendimiento, tamaño de ejecutable o minimización de la memoria utilizada en la ejecución del código.
Considere reemplazar la palabra "optimizar" por "mejorar la calidad de" o equivalente. – TrueWill
¿Cuál es la diferencia entre los términos para usted? El hecho de que la optimización está sujeta a varios significados es parte del uso de ese término. Si bien puedes seguir adelante y hacer el cambio en mi respuesta, me gustaría un poco más de justificación que "porque dices eso", por favor. –
@JB La definición de King Martin Fowler es "Refactorizar es una técnica disciplinada para reestructurar un cuerpo existente de código, alterando su estructura interna sin cambiar su comportamiento externo. Su corazón es una serie de pequeñas transformaciones que preservan el comportamiento. ') hace poco, pero una secuencia de transformaciones puede producir una reestructuración significativa ... ". El código de "optimización" podría tener el efecto secundario de cambiar su comportamiento externo por lo que podría no ser exactamente una refactorización. – pageman
"Refactoring es el proceso de cambio de un sistema de software de tal manera que no altera el comportamiento externo del código sin embargo, mejora su estructura interna." - MartinFowler en RefactoringImprovingTheDesignOfExistingCode
consulte este WhatIsRefactoring para obtener más información.
- 1. ¿Qué significa xmlns = "" significa exactamente
- 2. ¿Qué significa exactamente UrlReferrer?
- 3. ¿Qué significa Composable exactamente?
- 4. ¿Qué significa esto?
- 5. ¿Qué significa exactamente homoiconicity?
- 6. ¿Qué significa vinculación exactamente?
- 7. ¿Qué significa curlopt_binarytranfer exactamente?
- 8. ¿Cómo se refactoriza su antiguo código PHP?
- 9. ¿Qué significa esto y cómo lo ayuda?
- 10. ¿Qué significa exactamente "uso comercial"?
- 11. ¿Por qué oscurece su código?
- 12. OrderByDescending() por MSDN, ¿qué diablos significa esto?
- 13. jquery: ¿qué significa exactamente "$ (this)"?
- 14. ¿Qué significa esto? initWithFrame: CGRectZero]
- 15. ¿Qué significa esto? (int &) a
- 16. ¿Qué significa EXACTAMENTE "desreferenciando un puntero NULL"?
- 17. ¿qué significa esto: "jQuery ('> li', esto)"
- 18. ¿Qué significa esto salir (main())
- 19. bien, esto funcionó. ¿Qué es exactamente?
- 20. ¿Qué significa exactamente cuando $ _FILES está vacío?
- 21. ¿Qué significa exactamente esta importación en Scala?
- 22. ¿Qué significa exactamente var x: * en actionscript?
- 23. ¿Qué nombres de directorios '.' y '..' significa y ¿qué significa faDirectory?
- 24. "loop:" en código Java. ¿Qué es esto? ¿Por qué compila?
- 25. ¿Cuándo se refactoriza el código?
- 26. ¿Qué significa exactamente la función google.setOnLoadCallback (initialize)?
- 27. ¿qué significa exactamente la plataforma de palabras y api?
- 28. ¿Qué significa exactamente el conjunto de caracteres y la intercalación?
- 29. ¿Qué significa esto: "document.write ('<scr' + 'ipt ..."?
- 30. ¿Qué significa exactamente una "conexión persistente"?
@staticsan: -1 Esto puede ser lo que ves que sucede en el lugar donde trabajas, pero está lejos de ser la mejor práctica y está lejos de la definición. – quamrana
Podría explicar cómo esto es diferente de "Refactorizar ni corrige errores ni agrega nuevas funcionalidades, aunque podría preceder a cualquiera de las actividades. Más bien, mejora la comprensibilidad del código, cambia su estructura interna y diseño, y elimina el código muerto". (de la definición de Wikipedia). – staticsan
Uno de los casos de uso. También puede ser la primera vez que se debe reescribir el código porque el diseño no tiene en cuenta un nuevo requisito que acaba de aparecer, etc. – tgkprog