SlideShare uma empresa Scribd logo
Refactoring to Patterns
       Joshua Kerievsky
Cronograma
- Code Smells
- O que são patterns
- Factory (Headfirst)
- Command (Headfirst)
- Null Object (Headfirst)
- Conclusão
- Todos os patterns acima em problemas reais
Por que ?
- Factory
- Command
- Null Object
Code Smells
- Duplicated Code
- Long Method
- Conditional Complexity
- Primitive Obsession
- Indecent Exposure
- Shotgun Surgery
- Large Class
Duplicated Code
- O pior tipo de smell
- Pode estar explícito ou implícito no código
- Kent Beck
- SRP (Single Responsibility Principle)
Long Method
- Por que os métodos devem ser pequenos ?
- Legibilidade
- Fácil extensão
- Mantém o código simples e evita duplicação
- Métodos podem compartilhar a mesma lógica
- Fácil testar
Conditional Complexity
- Problema se sua lógica condicional aumenta
- Problema se sua lógica condicional é
complicada
Primitive Obsession
- Uso excessivo de valores primitivos
- Tipo não seguro (Entidades)
- Classes de dinheiro != double
- String
Shotgun Surgery
- Uma feature n classes
- Várias pequenas mudanças
- Alexandre Freire
Indecent Exposure
- Exposição de métodos que não são
importantes ou são mas de maneira indireta
- Aumenta complexidade do código
- Fabrica.getFuncionarios().getChefes().
getSubordinados().getNome();
Patterns
- O que são ?
- Devemos aprender todos ?
- Patternite
Factory
- Motivação

Centralização da criação de objetos diminuindo
sua exposição e duplicação de código.
Factory
- Qual a idéia ?
Factory
             It´s coding time
- PizzaStore
- SimplePizzaFactory
- PizzaTestDrive
Factory
                         Trade off
+ Consolida a lógica de criação e configuração de
preferências
+ Desacopla o cliente da lógica de criação
-Complica o design onde uma simples instância seria
suficiente
Command
- Motivação

Permite desacoplar a ação do objeto que
realmente executa.
Command
Problema do controle remoto genérico e suas
ações.
Command
Classes de botões do nosso controle remoto
Command
- Qual a idéia ?
Command
           It´s coding time

- RemoteLoader
- RemoteControl
- StereoOnWithCDCommand
- StereoOffCommand
- Stereo
- Command
Command
                      TradeOff
+ Mecanismo simples de executar vários
comportamentos diferentes de uma maneira uniforme
+ Permite mudança em tempo de execução mudar
quem vai ser executado e como
+ Código simples de implementar
- Complica um design onde um if seria suficiente
Null Object
E se não tivermos funções suficientes para
todos os botões do nosso controle ?
Null Object
- Motivação

Usado para lidar com multiplas validações de
campos nulos dentro do código
Null Object
- Qual a idéia ?
Null Object
             It´s coding time
- NoCommand
- RemoteControl
- RemoteLoader
Null Object
                        Trade off
+ Previne null pointer
+ Simplifica o código minimizando verificação de nulo
- Complica o design que algumas verificações resolveriam
Conclusão
- Não é chato como GOF
- Divertido de ler, principalmente se você codar
junto
- Não é para decorar
It´s show time
Command
Replace Conditional Dispatcher with Command

- Client
- CatalogApp
* Compose Method
Null Object
Introduce Null Object

- Navigation Applet
Factory
Move creation knowledge to a Factory

- StringNode
- Teste
- StringParser
Projeto
https://github.
com/maviteixeira/brownBagRefactoringToPatt
erns

Mais conteúdo relacionado

Mais procurados

Shell script
Shell script Shell script
Shell script
SoftD Abreu
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
Professor Samuel Ribeiro
 
PHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de ControlePHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de Controle
George Mendonça
 
Estrutura de controle if else
Estrutura de controle if elseEstrutura de controle if else
Estrutura de controle if else
Ramires Nascimento
 
Aop Aspect J 1.5.4
Aop Aspect J 1.5.4Aop Aspect J 1.5.4
Aop Aspect J 1.5.4
Diego Pacheco
 
APM Model in .NET - PT-pt
APM Model in .NET - PT-ptAPM Model in .NET - PT-pt
APM Model in .NET - PT-pt
Pedro De Almeida
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
Laís Lima
 
Lógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetiçãoLógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetição
Wesley R. Bezerra
 
Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02
Leandro Rezende
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
Leonardo Lima
 
Aula 12
Aula 12Aula 12
Aula 12
graconlima
 
Logica Algoritmo 04 Decisao
Logica Algoritmo 04 DecisaoLogica Algoritmo 04 Decisao
Logica Algoritmo 04 Decisao
Regis Magalhães
 
OpenMP Day1
OpenMP Day1OpenMP Day1
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
Maurício Linhares
 
Refatoração básica e obrigatória
Refatoração básica e obrigatóriaRefatoração básica e obrigatória
Refatoração básica e obrigatória
dtelaroli
 
aula 06 - Logica de programacao
aula 06 - Logica de programacaoaula 06 - Logica de programacao
aula 06 - Logica de programacao
Aislan Rafael
 
Algoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlgoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetição
Alex Camargo
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
Luciano Ramalho
 
Estrutura de repetição
Estrutura de repetiçãoEstrutura de repetição
Estrutura de repetição
Alessandra Sra JM
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)
Helder da Rocha
 

Mais procurados (20)

Shell script
Shell script Shell script
Shell script
 
Java básico - Módulo 05 - Estruturas de Repetição
Java  básico - Módulo 05 - Estruturas de RepetiçãoJava  básico - Módulo 05 - Estruturas de Repetição
Java básico - Módulo 05 - Estruturas de Repetição
 
PHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de ControlePHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de Controle
 
Estrutura de controle if else
Estrutura de controle if elseEstrutura de controle if else
Estrutura de controle if else
 
Aop Aspect J 1.5.4
Aop Aspect J 1.5.4Aop Aspect J 1.5.4
Aop Aspect J 1.5.4
 
APM Model in .NET - PT-pt
APM Model in .NET - PT-ptAPM Model in .NET - PT-pt
APM Model in .NET - PT-pt
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
 
Lógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetiçãoLógica de Programação - Estrutura de repetição
Lógica de Programação - Estrutura de repetição
 
Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
Aula 12
Aula 12Aula 12
Aula 12
 
Logica Algoritmo 04 Decisao
Logica Algoritmo 04 DecisaoLogica Algoritmo 04 Decisao
Logica Algoritmo 04 Decisao
 
OpenMP Day1
OpenMP Day1OpenMP Day1
OpenMP Day1
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Refatoração básica e obrigatória
Refatoração básica e obrigatóriaRefatoração básica e obrigatória
Refatoração básica e obrigatória
 
aula 06 - Logica de programacao
aula 06 - Logica de programacaoaula 06 - Logica de programacao
aula 06 - Logica de programacao
 
Algoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetiçãoAlgoritmos e Programação: Estruturas de repetição
Algoritmos e Programação: Estruturas de repetição
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Estrutura de repetição
Estrutura de repetiçãoEstrutura de repetição
Estrutura de repetição
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)
 

Semelhante a Refactoring to patterns

clean code
clean codeclean code
clean code
Douglas Siviotti
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
thiagobapt
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
Luiz Fernando Signorelli
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
tdc-globalcode
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
Elaine Naomi
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
Jorge Oleques
 
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Renan Siravegna
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
Robson Agapito Correa
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
Samuel Lourenço
 
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Marcelo Soares
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
Douglas Siviotti
 
Test-driven Development
Test-driven DevelopmentTest-driven Development
Test-driven Development
Denis L Presciliano
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
Dionatan default
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
Evelise Vazquez
 
TDD
TDDTDD
Testing node.js
Testing node.jsTesting node.js
Testing node.js
Carlos Mendes
 
Super tests - TDC 2014 - Node.js
Super tests - TDC 2014 - Node.jsSuper tests - TDC 2014 - Node.js
Super tests - TDC 2014 - Node.js
Marcos Bérgamo
 
Lapidando ruby
Lapidando rubyLapidando ruby
Lapidando ruby
mauricioszabo
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
Dextra Sistemas / Etec Itu
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
Rafael Fuchs, PMP, MBA
 

Semelhante a Refactoring to patterns (20)

clean code
clean codeclean code
clean code
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012
 
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - JavaneirosTestes de Unidade, por que você deve começar a fazer? - Javaneiros
Testes de Unidade, por que você deve começar a fazer? - Javaneiros
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
 
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
Como convenci meu chefe que devíamos automatizar testes - Marcelo Soares - TD...
 
Clean Code na Prática
Clean Code na PráticaClean Code na Prática
Clean Code na Prática
 
Test-driven Development
Test-driven DevelopmentTest-driven Development
Test-driven Development
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
TDD
TDDTDD
TDD
 
Testing node.js
Testing node.jsTesting node.js
Testing node.js
 
Super tests - TDC 2014 - Node.js
Super tests - TDC 2014 - Node.jsSuper tests - TDC 2014 - Node.js
Super tests - TDC 2014 - Node.js
 
Lapidando ruby
Lapidando rubyLapidando ruby
Lapidando ruby
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 

Último

Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 

Último (8)

Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 

Refactoring to patterns