2. SOBRE MÍ
Daniel González
Desarrollador de software.
Trabajo en una pequeña agencia de desarrollo
donde intentamos de hacer felices a nuestros
clientes.
@desarrolla2 bestias (del desarrollo de software)
Por el camino tratamos de mejorar
como desarrolladores.
22. ● Extract Method
● Inline Method
● Extract Variable
● Inline Temp
● Replace Temp with Query
● Split Temporary Variable
● Remove Assignments to
Parameters
● Replace Method with Method
Object
● Substitute Algorithm
Moving Features
between Objects
Composing Methods
● Move Method
● Move Field
● Extract Class
● Inline Class
● Hide Delegate
● Remove Middle Man
● Introduce Foreign Method
● Introduce Local Extension
23. ● Change Value to Reference
● Change Reference to Value
● Duplicate Observed Data
● Self Encapsulate Field
● Replace Data Value with Object
● Replace Array with Object
● Change Unidirectional
Association to Bidirectional
● Change Bidirectional Association
to Unidirectional
Organizing Data
● Encapsulate Field
● Encapsulate Collection
● Replace Magic Number with
Symbolic Constant
● Replace Type Code with Class
● Replace Type Code with
Subclasses
● Replace Type Code with
State/Strategy
● Replace Subclass with Fields
24. ● Consolidate Conditional Expression
● Consolidate Duplicate Conditional
Fragments
● Decompose Conditional
● Replace Conditional with
Polymorphism
● Remove Control Flag
● Replace Nested Conditional with
Guard Clauses
● Introduce Null Object
● Introduce Assertion
Dealing with
Generalization
Simplifying Conditional
Expressions
● Pull Up Field
● Pull Up Method
● Pull Up Constructor Body
● Push Down Field
● Push Down Method
● Extract Subclass
● Extract Superclass
● Extract Interface
● Collapse Hierarchy
● Form Template Method
● Replace Inheritance with
Delegation / Inheritance
25. ● Add Parameter
● Remove Parameter
● Rename Method
● Separate Query from Modifier
● Parameterize Method
● Introduce Parameter Object
● Preserve Whole Object
● Remove Setting Method
● Replace Parameter with Explicit
Methods
Simplifying Method Calls
● Replace Parameter with Method
Call
● Hide Method
● Replace Constructor with Factory
Method
● Replace Error Code with Exception
● Replace Exception with Test
27. ● Buscar una clase o un archivo
○ CTRL + N / CTRL + SHIFT + N
● Navegar a la referencia
○ CTRL + B / CTRL + CLICK
● Navegar adelante o atrás
○ ALT + SHIFT + LEFT / ALT +
SHIFT + RIGHT
● Ver ficheros visitados
recientemente
○ CTRL + E
● Ver fragmentos visitados
recientemente
○ CTRL + SHIFT + E
Navegación (gnome)
● Ver estructura de un fichero
○ CTRL + F12
● Método anterior o siguiente
○ ALT + UP / ALT + DOWN
● Ir al siguiente error
○ F2
● Saltar a la línea
○ CTRL + G
28. ● Colapsar y expandir un bloque
○ CTRL + SHIFT + ‘-’ / CTRL +
SHIFT + ‘+’
● Colapsar y expandir un bloque
○ CTRL + ‘-’ / CTRL + ‘+’
● Selección en modo columna
○ ALT + SHIFT + INSERT
● Formatear y ordenar
automáticamente
○ ALT + SHIFT + L
Edición (gnome)
● Pegar desde el histórico
○ CTRL + ALT + L
● Generar código
○ ALT + INSERT
● Duplicar / borrar línea
○ CTRL + D / CTRL + Y
● Mover bloque arriba y abajo
○ CTRL + SHIFT + UP / CTRL +
SHIFT + DOWN
29. ● Renombrar constante / propiedad /
parámetro / variable / método /
clase
○ ALT + F6
● Extraer constante / propiedad /
parámetro / variable / método
○ CTRL + ALT + C / CTRL + ALT + F
/ CTRL + ALT + P / CTRL + ALT +
V / CTRL + ALT + M
Refactoring (gnome)
● Mover una clase
○ F6
● Cambiar la firma de un método
○ CTRL + F6
30. ● Encontrar una acción
○ CTRL + SHIFT + A
Las madres de todos los atajos
● Refactor this
○ CTRL + ALT + SHIFT + T
32. Oye, que estoy aquí con
unos colegas, que estamos
montando un tema.
Le he pedido al informático
que te mande el código.
Funciona, pero...mira a ver...
TE LLAMA
FLORENTINO
Y TE DICE:
33. Comments (dispensables) Si un comentario es necesario para
explicar un fragmento de código utiliza
Extract Method.
Si un comentario es necesario para
explicar lo que hace un método utiliza
Rename Method
34. Switch Statements
(object orientation abusers)
Puedes aislar el switch mediante Extract
Method y después Move Method.
Si el switch es basado en un “tipo”
puedes utilizar Replace Type Code with
Subclasses
Si se trata de una serie de if else
anidados, puedes introducir Guard
Clauses
35. Primitive obsession
(bloaters)
Intenta agrupar campos “primitivos” en una
clase y desplaza su comportamiento dentro
utiliza Replace Data Value with Object.
Cuando dato complicados con codificados en
variables puedes utilizar Replace Type Code
with Class, Type Code with Subclasses o
Replace Type Code with State/Strategy.
Si se utilizan arrays para almacenar variables
puedes usar Replace Array with Object.
36. Duplicated code
(dispensables)
Si el código se encuentra dentro de la
misma clase utiliza Extract Method.
Si el código se encuentra dentro de dos
subclases utiliza Extract Method y luego
Pull Up Field.
Si el código se encuentra en dos clases
diferentes puedes usar Extract
Superclass o Extract Class.
37. Large class (bloaters)
Utiliza Extract Class si una parte del
comportamiento puede extraerse a un
componente separado.
Utiliza Extract Subclass si una parte del
comportamiento se puede implementar de
diferentes formas o se utiliza de forma
excepcional
Extract Interface ayuda si es conveniente
fijar el comportamiento que un cliente
puede usar.
40. El sitio web Refactoring.Guru
El libro Refactoring, improving the
design of existing code
Próximamente en el canal de youtube
de BESTIAS
PHPSTORM
REFACTORING
El canal de youtube de BESTIAS
El curso en Codely.tv