Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Refactoring

1,563 views

Published on

Reunión Virtual Alt.NET Hispano sobre Re

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Refactoring

  1. 1. Refactoring<br />Martín Salías<br />http://www.flickr.com/photos/yomostro/2972523219/<br />
  2. 2. Cualquier tonto puede escribir código que entienda una computadora.Los buenos programadores escriben código que puedan entender los humanos.<br />Foto: Miguel Saez–Alt.Net Meeting – Redmond, 2008<br />
  3. 3. Diseño<br />Diseñando puedo pensar muy rápido, pero mi razonamiento está lleno de agujeritos.<br />http://www.flickr.com/photos/hackerchick/4547529858/<br />
  4. 4. Malos olores<br />Si apesta, hay que cambiarlo.<br />La abuela Beck, <br />sobre la crianza de bebes.<br />http://www.flickr.com/photos/brian-burke/266468336/<br />
  5. 5. Código duplicado<br />El principio de todos los males<br />Refactorings:<br />Extraer método<br />Extraer clase<br />Subir campo<br />Método plantilla<br />
  6. 6. Método largo<br />Uno de los clásicos<br />Refactorings:<br />Extraer método<br />Reemplazar temporal por consulta<br />Reemplazar método por Objeto método<br />Descomponer condición<br />
  7. 7. Clase muy grande<br />Otro clásico<br />Refactorings:<br />Extraer Clase<br />Extraer Subclase<br />Extraer Interfaz<br />Reemplazar valor de datos con Objeto<br />
  8. 8. Lista de parámetros muy larga<br />Un vicio popular<br />Refactorings:<br />Reemplazar parámetro con Método<br />Introducir Objeto parámetro<br />Preservar Objeto completo<br />
  9. 9. Cambios divergentes<br />Falla al buscar responsabilidades<br />Refactoring:<br />Extraer clase<br />
  10. 10. Cirugía con escopeta<br />Los cambios afectan por doquier<br />Refactorings:<br />Mover método<br />Mover campo<br />Clase en una línea<br />
  11. 11. Envidia de características<br />Clases que usan más los miembros ajenos que los propios<br />Refactorings:<br />Mover método<br />Mover campo<br />Extraer método<br />
  12. 12. Datos en yunta<br />Grupitos inseparables<br />Refactorings:<br />Extraer clase<br />Introducir Objeto parámetro<br />Preservar Objeto completo<br />
  13. 13. Obsesión primitiva<br />Desperdiciar los tipos extendidos<br />Refactorings:<br />Reemplazar valor de datos con Objeto<br />Extraer clase<br />Introducir Objeto parámetro<br />Reemplazar array con objeto<br />Reemplazar tipo con clase<br />Reemplazar tipo con subclases<br />Reemplazar tipos con estado/estrategia<br />
  14. 14. Sentencias switch<br />Desperdiciar el poder del polimorfismo<br />Refactorings:<br />Reemplazar condicional con polimorfismo<br />Reemplazar tipo con subclases<br />Reemplazar tipo con estado/estrategia<br />Reemplazar parámetro con métodos explícitos<br />Introducir objeto nulo<br />
  15. 15. Jerarquías de herencia paralelas<br />Un caso especial de cirugía con escopeta<br />Cada vez que se modifica algo en una jerarquía, debemos modificar la otra.<br />Refactorings:<br />Mover método<br />Mover campo<br />
  16. 16. Clase vaga<br />Clases que no cubren su costo<br />Refactorings:<br />Clase en una línea<br />Colapsar jerarquía<br />
  17. 17. Generalidad especulativa<br />No hace falta todavía, pero puede ser que…<br />Refactorings:<br />Colapsar jerarquía<br />Clase en una línea<br />Quitar parámetro<br />Renombrar método<br />
  18. 18. Campo temporal<br />Los campos (o variables locales) deben justificarse<br />Refactorings:<br />Extraer clase<br />Introducir objeto nulo<br />
  19. 19. Cadenas de mensajes<br />Demasiados saltos sin una buena razón<br />Refactoring:<br />Esconder delegado<br />
  20. 20. Intermediario<br />Métodos que todo lo delegan<br />Refactorings:<br />Quitar Intermediario<br />Método en una línea<br />Reemplazar delegación con herencia<br />
  21. 21. Intimidad inapropiada<br />Conociendo otras clases demasiado de cerca<br />Refactorings:<br />Mover método<br />Mover campo<br />Cambiar asociación bidireccional a unidireccional<br />Reemplazar herencia con delegación<br />Esconder delegado<br />
  22. 22. Clases alternativas con interfaces diferentes<br />Quiebres en el polimorfismo y probables fallas de jerarquías<br />Refactorings:<br />Renombrar método<br />Mover método<br />
  23. 23. Biblioteca de clases incompleta<br />Extendiendo clases sin tener las fuentes<br />Refactorings:<br />Introducir método foráneo<br />Introducir extensión local<br />
  24. 24. Legado rechazado<br />Interrumpiendo las leyes de la herencia<br />Refactoring:<br />Reemplazar herencia por delegación<br />
  25. 25. Comentarios<br />No, no está mal poner comentarios, pero…<br />Refactorings:<br />Extraer método<br />Introducir aserción<br />
  26. 26. Evitando problemas con tests<br />Una de las maneras más seguras de hacer refactoring sin romper lo que ya funciona es utilizar Unit Testing.<br />Se escribe un test (si no existe previamente) antes de hacer cualquier cambio, y se verifica que siga pasándolo luego del refactoring.<br />
  27. 27. Herramientas de Refactoring<br />Refactoring Browser (Smalltalk)<br />Eclipse (Java)<br />Visual Studio / MonoDevelop (básicas)<br />ReSharper / Code Rush<br />
  28. 28. Bibliografía<br />Joshua Kerievsky<br />Martin Fowler<br />William Wake<br />www.refactoring.com<br />
  29. 29. martin@salias.com.ar<br />CodeAndBeyond.org<br />http://www.flickr.com/photos/-bast-/349497988/<br />

×