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

Refactoring to patterns