SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
Webinar - Refactoring
Daniel Archer - 2016
Acesse o vídeo em:
http://www.kinghost.com.br/eventos-online/webinar-refatoracao-em-php
Daniel Archer
● Programador PHP na KingHost
● Zend Certified Engineer 5.3
● Organizador PHPRS
● Trabalho com PHP há 6 anos
● Palestrante
○ PHP Conference Brasil (SP)
○ TDC Porto Alegre
○ Faculdade Senac
Webinar Refactoring | 2
Objetivo
Entender o conceito, importância e aplicação de refatoração de sistemas
PHP. Utilizaremos ténicas como SOLID e Design Patterns para realizar
essa tarefa tão importante.
Webinar Refactoring | 3
Público alvo
Desenvolvedores Júniors e Plenos que desejam aperfeiçoar sistemas
existentes. Agregando qualidade técnica ao seu código e conhecimento de
novas formas de desenvolvimento.
Webinar Refactoring | 4
Conteúdo do Webinar
1. O que é Refactoring
2. Como tudo começou
3. Livros de Apoio
4. Quando refatorar
5. SOLID
6. Design Patterns
7. Exemplo Simples
8. Refactoring ao Vivo!
1. O que é Refactoring
Webinar Refactoring | 5
Melhorar o código, sem alterar o seu comportamento.
Webinar Refactoring | 6
Melhoria Contínua
Legibilidade
Compreensão
Melhor Organização
Separação de Responsabilidades
Futura Manutenção
Otimização*
Webinar Refactoring | 7
Refactoring changes the
programs in small steps.
If you make a mistake, it
is easy to find a bug.
Kent Beck, American software engineer and
the creator of Extreme Programming.
Webinar Refactoring | 8
Como garantir essas mudanças?
Webinar Refactoring | 9
TESTS
TESTS EVERYWHERE
Webinar Refactoring | 10
Não devemos fazer a mesma coisa,
todos os dias!
Webinar Refactoring | 11
Webinar Refactoring | 12
Aprendemos a escrever... lendo!
GitHub
2. Como tudo começou
Webinar Refactoring | 13
14
Design Patterns…
15
Design Patterns…
em 77… a idéia de design patterns surgiu em
um artigo científico na área de Arquitetura!
16
Design Patterns…
Anos 80, a IBM lançava os primeiros
computadores pessoais.
em 87… Kent Beck utilizou essa mesma idéia
em programação.
17
Design Patterns…
Anos 90, começa a surgir a UML.
Em 95: GoF (Gang of Four)
Design Patterns
Em 99: Martin Fowler
Refactoring: Improving the design of existing code
3. Livros de Apoio
Webinar Refactoring | 18
Alguns livros que podem ajudar nos seus estudos...
Webinar Refactoring | 19
4. Quando Refatorar
Webinar Refactoring | 20
Procure por Bad Smells...
Webinar Refactoring | 21
Perguntas...
● Meu código antigo funciona, mas será que funciona bem?
Webinar Refactoring | 22
Perguntas...
● Meu código antigo funciona, mas será que funciona bem?
● Posso reutilizar o meu código em um novo projeto?
Webinar Refactoring | 23
Perguntas...
● Meu código antigo funciona, mas será que funciona bem?
● Posso reutilizar o meu código em um novo projeto?
● Outra pessoa consegue ler e entender o meu script?
5. S.O.L.I.D
Webinar Refactoring | 24
5. S.O.L.I.D
Webinar Refactoring | 25
Single Responsability
5. S.O.L.I.D
Webinar Refactoring | 26
Single Responsability
Open  Close Principle
5. S.O.L.I.D
Webinar Refactoring | 27
Single Responsability
Open  Close Principle
Liskov Substitution
5. S.O.L.I.D
Webinar Refactoring | 28
Single Responsability
Open  Close Principle
Liskov Substitution
Interface Segregation
5. S.O.L.I.D
Webinar Refactoring | 29
Single Responsability
Open  Close Principle
Liskov Substitution
Interface Segregation
Dependency Inversion
6. Design Patterns
Webinar Refactoring | 30
São resoluções prontas para problemas conhecidos.
Webinar Refactoring | 31
Patterns não são regras!
Devem ser utilizados como guia e não como lei.
Exemplos de D.P. em PHP
https://github.com/domnikl/DesignPatternsPHP
32Webinar Refactoring |
Procurem!
Object Calisthenics & Clean Code
Webinar Refactoring | 33
Webinar Refactoring | 34
7. Exemplo de refactoring simples
Utilizando inversão de dependência
35
36
37
38
Copy & Paste Detector
https://github.com/sebastianbergmann/phpcpd
8. Refactoring ao Vivo!
Webinar Refactoring | 39
Mão na massa!
Obrigado!
Dúvidas e sugestões
Daniel Archer – daniel.archer@kinghost.com.br
Estamos contratando!
Webinar Refactoring | 41
Programador PHP Sênior!
Equipe de Desenvolvimento KingHost
talentos@kinghost.com.br
Detalhes
http://www.kinghost.com.br/talentos-oportunidades?jobid=2780069

Mais conteúdo relacionado

Mais procurados

Testes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e BlazemeterTestes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e BlazemeterElias Nogueira
 
Introdução ao Test Driven Development (TDD)
Introdução ao Test Driven Development (TDD)Introdução ao Test Driven Development (TDD)
Introdução ao Test Driven Development (TDD)Lucas Nery
 
Continious Delivery in practice - POA Meetup
Continious Delivery in practice - POA MeetupContinious Delivery in practice - POA Meetup
Continious Delivery in practice - POA MeetupPamela Canchanya
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 Gabriel Machado
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Igor Abade
 
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...Agile Trends
 
Palestra LPI w3c
Palestra LPI w3cPalestra LPI w3c
Palestra LPI w3cRankest
 
As escolhas do desenvolvedor
As escolhas do desenvolvedorAs escolhas do desenvolvedor
As escolhas do desenvolvedorWillian Molinari
 
Coding dojo C# com NUnit
Coding dojo C# com NUnitCoding dojo C# com NUnit
Coding dojo C# com NUnitFabricio Panhan
 
Captando requisitos de forma ágil
Captando requisitos de forma ágilCaptando requisitos de forma ágil
Captando requisitos de forma ágilNícolas Iensen
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo realWilly Salazar
 
Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realHenrique Schmidt
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoRenan Carvalho
 

Mais procurados (20)

DojoTuba: Coding Dojo - Tubarão, SC
DojoTuba: Coding Dojo - Tubarão, SCDojoTuba: Coding Dojo - Tubarão, SC
DojoTuba: Coding Dojo - Tubarão, SC
 
Testes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e BlazemeterTestes de Performance na Nuvem com JMeter e Blazemeter
Testes de Performance na Nuvem com JMeter e Blazemeter
 
Introdução ao Test Driven Development (TDD)
Introdução ao Test Driven Development (TDD)Introdução ao Test Driven Development (TDD)
Introdução ao Test Driven Development (TDD)
 
Continious Delivery in practice - POA Meetup
Continious Delivery in practice - POA MeetupContinious Delivery in practice - POA Meetup
Continious Delivery in practice - POA Meetup
 
Design Patterns - Com Java
Design Patterns  - Com JavaDesign Patterns  - Com Java
Design Patterns - Com Java
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
Testes exploratórios não são sinônimo de bagunça! (TDC 2016 SP)
 
E so mais um campinho na tela
E so mais um campinho na telaE so mais um campinho na tela
E so mais um campinho na tela
 
BDD - Behaviour Driven Development
BDD - Behaviour Driven DevelopmentBDD - Behaviour Driven Development
BDD - Behaviour Driven Development
 
Boas práticas de desenvolvimento Ágil
Boas práticas de desenvolvimento ÁgilBoas práticas de desenvolvimento Ágil
Boas práticas de desenvolvimento Ágil
 
Bdd&tdd
Bdd&tddBdd&tdd
Bdd&tdd
 
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
Agile Tester – a importância da automação dos testes no DevOps - Sidnei Eiji ...
 
Palestra LPI w3c
Palestra LPI w3cPalestra LPI w3c
Palestra LPI w3c
 
As escolhas do desenvolvedor
As escolhas do desenvolvedorAs escolhas do desenvolvedor
As escolhas do desenvolvedor
 
Coding dojo C# com NUnit
Coding dojo C# com NUnitCoding dojo C# com NUnit
Coding dojo C# com NUnit
 
Captando requisitos de forma ágil
Captando requisitos de forma ágilCaptando requisitos de forma ágil
Captando requisitos de forma ágil
 
Programação Funcional usando F#
Programação Funcional usando F#Programação Funcional usando F#
Programação Funcional usando F#
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo real
 
Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo real
 
Não existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu códigoNão existe feedback melhor do que o do seu código
Não existe feedback melhor do que o do seu código
 

Semelhante a [Webinar] Refatoração em PHP

Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosDiego Santos
 
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?tdc-globalcode
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal EngineAdolfo Neto
 
Geoprocessamento livre na web com openlayers e cake php
Geoprocessamento livre na web com openlayers e cake phpGeoprocessamento livre na web com openlayers e cake php
Geoprocessamento livre na web com openlayers e cake phpRafael Soto
 
Treinamentos Avançados em Informática
Treinamentos Avançados em InformáticaTreinamentos Avançados em Informática
Treinamentos Avançados em InformáticaEder Carneiro
 
MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#Gustavo Bellini Bigardi
 
LPUG #10 agenda e community updates - 2020-09-16
LPUG #10   agenda e community updates - 2020-09-16LPUG #10   agenda e community updates - 2020-09-16
LPUG #10 agenda e community updates - 2020-09-16Fernando Fernández
 
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Maurício Aniche
 

Semelhante a [Webinar] Refatoração em PHP (20)

Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
 
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
TDC2016POA | Trilha PHP - Por que utilizar o Laravel?
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Refatorar é preciso! 2.0
Refatorar é preciso! 2.0Refatorar é preciso! 2.0
Refatorar é preciso! 2.0
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
Trabalho xp
Trabalho xpTrabalho xp
Trabalho xp
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
PHP: Como não programar em POG
PHP: Como não programar em POGPHP: Como não programar em POG
PHP: Como não programar em POG
 
Vamos falar de DevOps?
Vamos falar de DevOps?Vamos falar de DevOps?
Vamos falar de DevOps?
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal Engine
 
Geoprocessamento livre na web com openlayers e cake php
Geoprocessamento livre na web com openlayers e cake phpGeoprocessamento livre na web com openlayers e cake php
Geoprocessamento livre na web com openlayers e cake php
 
Coding Dojo Aplicado ao Ambiente Organizacional
Coding Dojo Aplicado ao Ambiente OrganizacionalCoding Dojo Aplicado ao Ambiente Organizacional
Coding Dojo Aplicado ao Ambiente Organizacional
 
Treinamentos Avançados em Informática
Treinamentos Avançados em InformáticaTreinamentos Avançados em Informática
Treinamentos Avançados em Informática
 
Cursos Season
Cursos SeasonCursos Season
Cursos Season
 
Cursos Season
Cursos Season Cursos Season
Cursos Season
 
MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#
 
LPUG #10 agenda e community updates - 2020-09-16
LPUG #10   agenda e community updates - 2020-09-16LPUG #10   agenda e community updates - 2020-09-16
LPUG #10 agenda e community updates - 2020-09-16
 
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
 

Mais de KingHost - Hospedagem de sites

Mais de KingHost - Hospedagem de sites (11)

KingCode: o Culture Code da KingHost
KingCode: o Culture Code da KingHostKingCode: o Culture Code da KingHost
KingCode: o Culture Code da KingHost
 
Painel: Batalha de Programador
Painel: Batalha de ProgramadorPainel: Batalha de Programador
Painel: Batalha de Programador
 
Web Components e o desenvolvimento de aplicações web modernas
Web Components e o desenvolvimento de aplicações web modernasWeb Components e o desenvolvimento de aplicações web modernas
Web Components e o desenvolvimento de aplicações web modernas
 
Utilizando Docker para escalonar aplicações Node.Js
Utilizando Docker para escalonar aplicações Node.JsUtilizando Docker para escalonar aplicações Node.Js
Utilizando Docker para escalonar aplicações Node.Js
 
Front vs Back: Tornando o mundo Web mais fácil
Front vs Back: Tornando o mundo Web mais fácil Front vs Back: Tornando o mundo Web mais fácil
Front vs Back: Tornando o mundo Web mais fácil
 
Programação na Indústria de Jogos
Programação na Indústria de JogosProgramação na Indústria de Jogos
Programação na Indústria de Jogos
 
[Webinar] Utilizando o Design Thinking para Melhorar seus Projetos Online
[Webinar] Utilizando o Design Thinking para Melhorar seus Projetos Online[Webinar] Utilizando o Design Thinking para Melhorar seus Projetos Online
[Webinar] Utilizando o Design Thinking para Melhorar seus Projetos Online
 
[E-book] Como criar e manter um site ou blog com o Wordpress
[E-book] Como criar e manter um site ou blog com o Wordpress[E-book] Como criar e manter um site ou blog com o Wordpress
[E-book] Como criar e manter um site ou blog com o Wordpress
 
[E-book] Como minha empresa pode explorar as redes sociais
[E-book] Como minha empresa pode explorar as redes sociais[E-book] Como minha empresa pode explorar as redes sociais
[E-book] Como minha empresa pode explorar as redes sociais
 
[Whitepaper] SSL Kinghost
[Whitepaper] SSL Kinghost[Whitepaper] SSL Kinghost
[Whitepaper] SSL Kinghost
 
[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL[Webinar] Performance e otimização de banco de dados MySQL
[Webinar] Performance e otimização de banco de dados MySQL
 

[Webinar] Refatoração em PHP