SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
REFACTORING
WITH PHPSTORM
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.
MENÚ
ENTRANTES (15’)
Introducción teórica
(pequeña)
Code Smells (algunos)
Refactors (de pasada)
Atajos PHPStorm (por
encima)
MENÚ DEL DÍA
PLATOS
PRINCIPALES
(15’)
Demostración (breve)
DISCLAIMER
Publicado por:
Martin Fowler en 1999.
Refactoring,
improving the design
of existing code
AGNÓSTICO
Los conceptos que vamos a
presentar son independientes
del lenguaje de programación
o del entorno de desarrollo.
REFACTORING
“
¿POR QUÉ?
Mayor velocidad
Menos errores
(Nos olvidamos
del rendimiento)
1.
2.
3.
Software is meant
to be soft.
¿CUÁNDO?
Sobre el código
funcionando
y con test.
¿CÓMO?
Pequeños pasos
incrementales.
Evitando tener el código roto
durante demasiado tiempo.
Utilizando la regla
del boy scout
1.
2.
¿QUÉ?
Buscamos una serie de
problemas (code smells).
Sobre los que se aplican técnicas (recipes)
con uno o más pasos (refactors).
CODE SMELLS
DISPENSABLES
Comments
Duplicate Code
Data Class
Dead Code
Speculative Generality
Lazy Class
Speculative Generality
Existen clases con métodos o
atributos que no se usan nunca.
OBJECT ORIENTATION
ABUSERS
Alternative Classes with
Different Interfaces
Switch Statements
Refused Bequest
Temporary Field
Refused Bequest
Algunas subclases no utilizan un
grupo de métodos o de
propiedades de la clase padre.
Long Method
Large Class
Primitive Obsession
Long Parameter List
Data Clumps
BLOATERS
Divergent Change
Parallel Inheritance
Hierarchies
Shotgun Surgery
CHANGE PREVENTERS
Feature Envy
Inappropriate Intimacy
Message Chains
Middle Man
COUPLERS
REFACTORS
● 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
● 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
● 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
● 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
WITH PHPSTORM
● 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
● 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
● 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
● Encontrar una acción
○ CTRL + SHIFT + A
Las madres de todos los atajos
● Refactor this
○ CTRL + ALT + SHIFT + T
DEMO
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:
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
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
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.
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.
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.
MÁS ?
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
PREGUNTAS ?
GRACIAS !
daniel@devtia.com

Más contenido relacionado

La actualidad más candente

Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2karlalopezbello
 
Tutorial algoritmo estructuras condicionales
Tutorial algoritmo   estructuras condicionalesTutorial algoritmo   estructuras condicionales
Tutorial algoritmo estructuras condicionalesMichele André
 
Semana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuarioSemana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuariovictdiazm
 
Bucles de Control Repetitivo Ciclos For
Bucles de Control Repetitivo  Ciclos ForBucles de Control Repetitivo  Ciclos For
Bucles de Control Repetitivo Ciclos ForRichard Robalino
 
Angie presentación.
Angie presentación.Angie presentación.
Angie presentación.AngieGrz
 

La actualidad más candente (6)

Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2Programacion ii modulo2-leccion2
Programacion ii modulo2-leccion2
 
Tutorial algoritmo estructuras condicionales
Tutorial algoritmo   estructuras condicionalesTutorial algoritmo   estructuras condicionales
Tutorial algoritmo estructuras condicionales
 
Semana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuarioSemana 8 excepciones definidas por el usuario
Semana 8 excepciones definidas por el usuario
 
Bucles de Control Repetitivo Ciclos For
Bucles de Control Repetitivo  Ciclos ForBucles de Control Repetitivo  Ciclos For
Bucles de Control Repetitivo Ciclos For
 
Angie presentación.
Angie presentación.Angie presentación.
Angie presentación.
 
Selectivas
SelectivasSelectivas
Selectivas
 

Similar a Refactoring with php storm

3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdfEdwinQuintero52
 
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdfEdwinQuintero52
 
Encadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de DiseñoEncadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de DiseñoHernan Wilkinson
 
cream code with objective-c
cream code with objective-ccream code with objective-c
cream code with objective-cidealistaimasd
 
Tema1Instrucciones-DeclaracionAsignacion.pptx
Tema1Instrucciones-DeclaracionAsignacion.pptxTema1Instrucciones-DeclaracionAsignacion.pptx
Tema1Instrucciones-DeclaracionAsignacion.pptxJaime Sayago Heredia
 
6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a ObjetosJose Emilio Labra Gayo
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Iván López Martín
 
Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)jmiguel rodriguez
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy codeBiko
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando softwareGabriel Moral
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmosCarlos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmosCarlos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmosCarlos
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosJosé Antonio Sandoval Acosta
 
Programacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILEProgramacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILEGiovanny Guillen
 

Similar a Refactoring with php storm (20)

Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
 
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
 
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
3 M1 - U1 -Lección 12-0203-2024 -1.2.pdf
 
Encadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de DiseñoEncadenamiento de refactorings para generar cambios Agiles de Diseño
Encadenamiento de refactorings para generar cambios Agiles de Diseño
 
cream code with objective-c
cream code with objective-ccream code with objective-c
cream code with objective-c
 
Symfony parte 6
Symfony parte 6Symfony parte 6
Symfony parte 6
 
Tema1Instrucciones-DeclaracionAsignacion.pptx
Tema1Instrucciones-DeclaracionAsignacion.pptxTema1Instrucciones-DeclaracionAsignacion.pptx
Tema1Instrucciones-DeclaracionAsignacion.pptx
 
6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos6 Principios de Programación Orientada a Objetos
6 Principios de Programación Orientada a Objetos
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
 
Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)Clean Code (Presentacion interna en Virtual Software)
Clean Code (Presentacion interna en Virtual Software)
 
Working effectively with legacy code
Working effectively with legacy codeWorking effectively with legacy code
Working effectively with legacy code
 
Buenas practicas desarrollando software
Buenas practicas desarrollando softwareBuenas practicas desarrollando software
Buenas practicas desarrollando software
 
¡Twig desde 0!
¡Twig desde 0! ¡Twig desde 0!
¡Twig desde 0!
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmos
 
01 algoritmos
01 algoritmos01 algoritmos
01 algoritmos
 
ALGORITMOS
ALGORITMOSALGORITMOS
ALGORITMOS
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
 
Greenfoot 6
Greenfoot 6Greenfoot 6
Greenfoot 6
 
Programacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILEProgramacion RPG: Conceptos ILE
Programacion RPG: Conceptos ILE
 

Más de Daniel González Cerviño

Más de Daniel González Cerviño (6)

Presentación del grupo PHPMad en el codemotion madrid 2014
Presentación del grupo PHPMad en el codemotion madrid 2014Presentación del grupo PHPMad en el codemotion madrid 2014
Presentación del grupo PHPMad en el codemotion madrid 2014
 
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
 
Monolog - deSymfony unconference 2013
Monolog - deSymfony unconference 2013 Monolog - deSymfony unconference 2013
Monolog - deSymfony unconference 2013
 
Conquista la galaxia con GIT
Conquista la galaxia con GITConquista la galaxia con GIT
Conquista la galaxia con GIT
 
Varnish http cache
Varnish http cacheVarnish http cache
Varnish http cache
 
Introducción a TDD y PHPUnit
Introducción a TDD y PHPUnitIntroducción a TDD y PHPUnit
Introducción a TDD y PHPUnit
 

Último

ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaXjoseantonio01jossed
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSaulSantiago25
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxYajairaMartinez30
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdfFernandaGarca788912
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 
Ingeniería de Tránsito. Proyecto Geométrico de calles y carreteras, es el pro...
Ingeniería de Tránsito. Proyecto Geométrico de calles y carreteras, es el pro...Ingeniería de Tránsito. Proyecto Geométrico de calles y carreteras, es el pro...
Ingeniería de Tránsito. Proyecto Geométrico de calles y carreteras, es el pro...wvernetlopez
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASfranzEmersonMAMANIOC
 
Rendimiento-de-Maquinaria y precios unitarios para la construcción de una ma...
Rendimiento-de-Maquinaria y precios unitarios  para la construcción de una ma...Rendimiento-de-Maquinaria y precios unitarios  para la construcción de una ma...
Rendimiento-de-Maquinaria y precios unitarios para la construcción de una ma...RichardRivas28
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxSergioGJimenezMorean
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptxguillermosantana15
 
nom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfnom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfDiegoMadrigal21
 

Último (20)

ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusibles
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
Presentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptxPresentación electricidad y magnetismo.pptx
Presentación electricidad y magnetismo.pptx
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdf
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 
Ingeniería de Tránsito. Proyecto Geométrico de calles y carreteras, es el pro...
Ingeniería de Tránsito. Proyecto Geométrico de calles y carreteras, es el pro...Ingeniería de Tránsito. Proyecto Geométrico de calles y carreteras, es el pro...
Ingeniería de Tránsito. Proyecto Geométrico de calles y carreteras, es el pro...
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
 
Rendimiento-de-Maquinaria y precios unitarios para la construcción de una ma...
Rendimiento-de-Maquinaria y precios unitarios  para la construcción de una ma...Rendimiento-de-Maquinaria y precios unitarios  para la construcción de una ma...
Rendimiento-de-Maquinaria y precios unitarios para la construcción de una ma...
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
 
nom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdfnom-028-stps-2012-nom-028-stps-2012-.pdf
nom-028-stps-2012-nom-028-stps-2012-.pdf
 

Refactoring with php storm

  • 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.
  • 4. ENTRANTES (15’) Introducción teórica (pequeña) Code Smells (algunos) Refactors (de pasada) Atajos PHPStorm (por encima) MENÚ DEL DÍA PLATOS PRINCIPALES (15’) Demostración (breve)
  • 6. Publicado por: Martin Fowler en 1999. Refactoring, improving the design of existing code
  • 7. AGNÓSTICO Los conceptos que vamos a presentar son independientes del lenguaje de programación o del entorno de desarrollo.
  • 9. “ ¿POR QUÉ? Mayor velocidad Menos errores (Nos olvidamos del rendimiento) 1. 2. 3. Software is meant to be soft.
  • 11. ¿CÓMO? Pequeños pasos incrementales. Evitando tener el código roto durante demasiado tiempo. Utilizando la regla del boy scout 1. 2.
  • 12. ¿QUÉ? Buscamos una serie de problemas (code smells). Sobre los que se aplican técnicas (recipes) con uno o más pasos (refactors).
  • 14. DISPENSABLES Comments Duplicate Code Data Class Dead Code Speculative Generality Lazy Class
  • 15. Speculative Generality Existen clases con métodos o atributos que no se usan nunca.
  • 16. OBJECT ORIENTATION ABUSERS Alternative Classes with Different Interfaces Switch Statements Refused Bequest Temporary Field
  • 17. Refused Bequest Algunas subclases no utilizan un grupo de métodos o de propiedades de la clase padre.
  • 18. Long Method Large Class Primitive Obsession Long Parameter List Data Clumps BLOATERS
  • 20. Feature Envy Inappropriate Intimacy Message Chains Middle Man COUPLERS
  • 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
  • 31. DEMO
  • 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.
  • 38.
  • 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