SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

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çãoProfessor Samuel Ribeiro
 
PHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de ControlePHP 5.3 - Estruturas de Controle
PHP 5.3 - Estruturas de ControleGeorge Mendonça
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascriptLaí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çãoWesley R. Bezerra
 
Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02Algoritmos C/C++ - Aula 02
Algoritmos C/C++ - Aula 02Leandro Rezende
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem CLeonardo Lima
 
Logica Algoritmo 04 Decisao
Logica Algoritmo 04 DecisaoLogica Algoritmo 04 Decisao
Logica Algoritmo 04 DecisaoRegis Magalhães
 
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óriadtelaroli
 
aula 06 - Logica de programacao
aula 06 - Logica de programacaoaula 06 - Logica de programacao
aula 06 - Logica de programacaoAislan 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çãoAlex Camargo
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)Helder da Rocha
 

Tendances (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)
 

Similaire à Refactoring to patterns

TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
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 ErlangElaine Naomi
 
Apresentacao tdc 2012
Apresentacao tdc 2012Apresentacao tdc 2012
Apresentacao tdc 2012Jorge 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? - JavaneirosRenan Siravegna
 
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
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Super tests - TDC 2014 - Node.js
Super tests - TDC 2014 - Node.jsSuper tests - TDC 2014 - Node.js
Super tests - TDC 2014 - Node.jsMarcos Bérgamo
 
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 softwareDextra Sistemas / Etec Itu
 

Similaire à 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
 

Refactoring to patterns