refactoring

29
Refactoring Martín Salías http://www.flickr.com/photos/yomostro/2972523219/

Upload: martin-salias

Post on 19-Nov-2014

1.529 views

Category:

Technology


4 download

DESCRIPTION

Reunión Virtual Alt.NET Hispano sobre Re

TRANSCRIPT

Page 1: Refactoring

Refactoring

Martín Salías

http://www.flickr.com/photos/yomostro/2972523219/

Page 2: Refactoring

Cualquier tonto puede escribir código que entienda una computadora.Los buenos programadores escriben código que puedan entender los humanos.

Foto: Miguel Saez – Alt.Net Meeting – Redmond, 2008

Page 3: Refactoring

Diseño Diseñando puedo pensar muy rápido, pero mi razonamiento está lleno de agujeritos.

http://www.flickr.com/photos/hackerchick/4547529858/

Page 4: Refactoring

Malos oloresSi apesta, hay que cambiarlo.

http://www.flickr.com/photos/brian-burke/266468336/

La abuela Beck, sobre la crianza de bebes.

Page 5: Refactoring

Código duplicado

• El principio de todos los males

• Refactorings:– Extraer método– Extraer clase– Subir campo– Método plantilla

Page 6: Refactoring

Método largo

• Uno de los clásicos

• Refactorings:– Extraer método– Reemplazar temporal por

consulta– Reemplazar método por

Objeto método– Descomponer condición

Page 7: Refactoring

Clase muy grande

• Otro clásico

• Refactorings:– Extraer Clase– Extraer Subclase– Extraer Interfaz– Reemplazar valor de

datos con Objeto

Page 8: Refactoring

Lista de parámetros muy larga

• Un vicio popular

• Refactorings:– Reemplazar parámetro

con Método– Introducir Objeto

parámetro– Preservar Objeto

completo

Page 9: Refactoring

Cambios divergentes

• Falla al buscar responsabilidades

• Refactoring:– Extraer clase

Page 10: Refactoring

Cirugía con escopeta

• Los cambios afectan por doquier

• Refactorings:– Mover método– Mover campo– Clase en una línea

Page 11: Refactoring

Envidia de características

• Clases que usan más los miembros ajenos que los propios

• Refactorings:– Mover método– Mover campo– Extraer método

Page 12: Refactoring

Datos en yunta

• Grupitos inseparables

• Refactorings:– Extraer clase– Introducir Objeto

parámetro– Preservar Objeto

completo

Page 13: Refactoring

Obsesión primitiva• Desperdiciar los tipos extendidos

• Refactorings:– Reemplazar valor de datos con

Objeto– Extraer clase– Introducir Objeto parámetro– Reemplazar array con objeto– Reemplazar tipo con clase– Reemplazar tipo con subclases– Reemplazar tipos con

estado/estrategia

Page 14: Refactoring

Sentencias switch

• Desperdiciar el poder del polimorfismo

• Refactorings:– Reemplazar condicional con

polimorfismo– Reemplazar tipo con subclases– Reemplazar tipo con

estado/estrategia– Reemplazar parámetro con

métodos explícitos– Introducir objeto nulo

Page 15: Refactoring

Jerarquías de herencia paralelas

• Un caso especial de cirugía con escopeta

• Cada vez que se modifica algo en una jerarquía, debemos modificar la otra.

• Refactorings:– Mover método– Mover campo

Page 16: Refactoring

Clase vaga

• Clases que no cubren su costo

• Refactorings:– Clase en una línea– Colapsar jerarquía

Page 17: Refactoring

Generalidad especulativa

• No hace falta todavía, pero puede ser que…

• Refactorings:– Colapsar jerarquía– Clase en una línea– Quitar parámetro– Renombrar método

Page 18: Refactoring

Campo temporal

• Los campos (o variables locales) deben justificarse

• Refactorings:– Extraer clase– Introducir objeto nulo

Page 19: Refactoring

Cadenas de mensajes

• Demasiados saltos sin una buena razón

• Refactoring:– Esconder delegado

Page 20: Refactoring

Intermediario

• Métodos que todo lo delegan

• Refactorings:– Quitar Intermediario– Método en una línea– Reemplazar delegación

con herencia

Page 21: Refactoring

Intimidad inapropiada

• Conociendo otras clases demasiado de cerca

• Refactorings:– Mover método– Mover campo– Cambiar asociación

bidireccional a unidireccional– Reemplazar herencia con

delegación– Esconder delegado

Page 22: Refactoring

Clases alternativas con interfaces diferentes

• Quiebres en el polimorfismo y probables fallas de jerarquías

• Refactorings:– Renombrar método– Mover método

Page 23: Refactoring

Biblioteca de clases incompleta

• Extendiendo clases sin tener las fuentes

• Refactorings:– Introducir método

foráneo– Introducir extensión local

Page 24: Refactoring

Legado rechazado

• Interrumpiendo las leyes de la herencia

• Refactoring:– Reemplazar herencia por

delegación

Page 25: Refactoring

Comentarios

• No, no está mal poner comentarios, pero…

• Refactorings:– Extraer método– Introducir aserción

Page 26: Refactoring

Evitando problemas con tests

• Una de las maneras más seguras de hacer refactoring sin romper lo que ya funciona es utilizar Unit Testing.

• Se escribe un test (si no existe previamente) antes de hacer cualquier cambio, y se verifica que siga pasándolo luego del refactoring.

Page 27: Refactoring

Herramientas de Refactoring

• Refactoring Browser (Smalltalk)

• Eclipse (Java)

• Visual Studio / MonoDevelop (básicas)

• ReSharper / Code Rush

Page 28: Refactoring

Bibliografía

www.refactoring.com

Joshua KerievskyMartin Fowler William Wake

Page 29: Refactoring

http://www.flickr.com/photos/-bast-/349497988/

[email protected]