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

PPT
Introducao XP
ODP
Aula13 - Estrutura de repetição (for e while) - PHP
PDF
Alg aula 05-1 - estruturas de-repeticao tp1 (repita e enquanto)
PDF
Objects calisthenics - Os 10 mandamentos do rei do código
PDF
Código limpo: Funções Capítulo 3
PDF
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
PPT
Java básico - Módulo 04: Estruturas de controle
PDF
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
Introducao XP
Aula13 - Estrutura de repetição (for e while) - PHP
Alg aula 05-1 - estruturas de-repeticao tp1 (repita e enquanto)
Objects calisthenics - Os 10 mandamentos do rei do código
Código limpo: Funções Capítulo 3
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
Java básico - Módulo 04: Estruturas de controle
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...

Mais procurados (20)

PDF
Shell script
PPT
Java básico - Módulo 05 - Estruturas de Repetição
PDF
PHP 5.3 - Estruturas de Controle
PPT
Estrutura de controle if else
PPT
Aop Aspect J 1.5.4
PDF
APM Model in .NET - PT-pt
PPTX
Testes com javascript
PPT
Lógica de Programação - Estrutura de repetição
ODP
Algoritmos C/C++ - Aula 02
PDF
Recursividade em linguagem C
PDF
Aula 12
PPT
Logica Algoritmo 04 Decisao
PPTX
PPT
Introdução ao Java 5
ODP
Refatoração básica e obrigatória
ODP
aula 06 - Logica de programacao
PDF
Algoritmos e Programação: Estruturas de repetição
PDF
JavaScript: agora é sério
PPTX
Estrutura de repetição
PDF
Java Memory Model (2005)
Shell script
Java básico - Módulo 05 - Estruturas de Repetição
PHP 5.3 - Estruturas de Controle
Estrutura de controle if else
Aop Aspect J 1.5.4
APM Model in .NET - PT-pt
Testes com javascript
Lógica de Programação - Estrutura de repetição
Algoritmos C/C++ - Aula 02
Recursividade em linguagem C
Aula 12
Logica Algoritmo 04 Decisao
Introdução ao Java 5
Refatoração básica e obrigatória
aula 06 - Logica de programacao
Algoritmos e Programação: Estruturas de repetição
JavaScript: agora é sério
Estrutura de repetição
Java Memory Model (2005)
Anúncio

Semelhante a Refactoring to patterns (20)

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

Último (11)

PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Utilizando code blockes por andre backes
PDF
Jira Software projetos completos com scrum
PDF
Manejo integrado de pragas na cultura do algodão
PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Eng. Software - pontos essenciais para o início
Tipos de servidor em redes de computador.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Utilizando code blockes por andre backes
Jira Software projetos completos com scrum
Manejo integrado de pragas na cultura do algodão
Conceitos básicos de Redes Neurais Artificiais
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Viasol Energia Solar -Soluções para geração e economia de energia
Proposta de Implementação de uma Rede de Computador Cabeada.pptx

Refactoring to patterns