2. AGENDA
AGENDA
▸ Introdução
▸ Categorias de odores de código
▸ Inchadores.
▸ Abusadores de Orientação a objetos.
▸ Preventores de alteração.
▸ Dispensaveis.
▸ Acopladores.
▸ Referências e sugestões de leitura
Photo by Richárd Ecsedi on Unsplash
3. ODORES DE CÓDIGO
ODORES DE CÓDIGO
▸ Inchadores
▸ Métodos grandes
▸ Obsessão Primitiva
▸ Aglomerados de dados
▸ Abusadores de Orientação a
objetos
▸ Switch Statements
▸ Recusado Legado
▸ Preventores de alteração
▸ Cirurgia de espingarda
▸ Dispensaveis
▸ Comentários
▸ Classe de dados
▸ Acopladores
▸ Cadeias de Mensagens
▸ Homem do meio
4. CODE SMELL É UMA INDICAÇÃO NA
SUPERFÍCIE QUE GERALMENTE
CORRESPONDE A UM PROBLEMA MAIS
PROFUNDO NO SISTEMA.
Martin Fowler
DEFINIÇÃO
6. INCHADORES
INCHADORES
▸ São códigos, métodos e
classes que aumentaram para
proporções gigantescas com
as quais são difíceis de
trabalhar.
▸ Normalmente, esses cheiros
não surgem do nada, eles se
acumulam com o tempo à
medida que o programa
evolui.
8. MÉTODOS GRANDES
SINAIS E SINTOMAS
▸ Um método contém muitas linhas de código. Geralmente,
qualquer método com mais de dez linhas deve fazer com
que você comece a fazer perguntas.
16. OBSESSÃO POR PRIMITIVOS
SINAIS E SINTOMAS
▸ Uso de primitivos em vez de pequenos objetos para
tarefas simples (como moeda, intervalos, cadeias especiais
para números de telefone, etc.)
▸ Uso de constantes para codificação de informações (como
uma constante USER_ADMIN_ROLE = 1 para se referir a
usuários com direitos de administrador.)
19. AGLOMERADOS DE DADOS
SINAIS E SINTOMAS
▸ Às vezes, partes diferentes do código contêm grupos
idênticos de variáveis. Esses grupos devem ser
transformados em suas próprias classes.
22. ABUSADORES DE ORIENTAÇÃO A OBJETOS
ABUSADORES DE ORIENTAÇÃO A OBJETOS
▸ Todos esses odores são
aplicações incompletas ou
incorretas de princípios de
programação orientados a
objetos.
24. LEGADO RECUSADO
SINAIS E SINTOMAS
▸ Se uma subclasse usar apenas alguns dos métodos e
propriedades herdados de seus pais, a hierarquia estará
desalinhada. Os métodos desnecessários podem
simplesmente não ser usados ou redefinidos e emitir
exceções.
28. OPERADORES SWITCH
SINAIS E SINTOMAS
▸ Você tem um operador de switch complexo ou sequência
de instruções if.
QUANDO IGNORAR
▸ Quando um operador de switch executa ações simples, não há
motivo para fazer alterações no código.
▸ Muitas vezes, os operadores de comutação são usados pelos
padrões de projeto de fábrica (Factory Method e Abstract
Factory) para selecionar uma classe criada.
30. PREVENTORES DE ALTERAÇÃO
PREVENTORES DE ALTERAÇÃO
▸ Esses odores significam que,
se você precisar alterar algo
em um lugar em seu código,
também precisará fazer
muitas alterações em outros
lugares. O desenvolvimento
de programas torna-se
muito mais complicado e
caro como resultado.
36. COMENTÁRIOS
SINAIS E SINTOMAS
▸ Um método é preenchido com comentários explicativos.
QUANDO IGNORAR
▸ Comentários às vezes podem ser úteis:
▸ Ao explicar porque algo está sendo implementado de
uma maneira particular.
▸ Ao explicar algoritmos complexos (quando todos os
outros métodos para simplificar o algoritmo foram
tentados e são curtos).
37. UMA FALÁCIA COMUM É ASSUMIR QUE OS
AUTORES DE CÓDIGO INCOMPREENSÍVEL
PODERÃO DE ALGUMA FORMA SE EXPRESSAR
DE FORMA LÚCIDA E CLARA NOS
COMENTÁRIOS.
Kevlin Henney
COMENTÁRIOS
39. CLASSE DE DADOS
SINAIS E SINTOMAS
▸ Uma classe de dados refere-se a uma classe que contém
apenas campos e métodos brutos para acessá-los (getters
e setters). Estes são simplesmente contêineres para dados
usados por outras classes. Essas classes não contêm
nenhuma funcionalidade adicional e não podem operar
de forma independente nos dados que possuem.
41. ACOPLADORES
COUPLERS
▸ Todos os odores deste
grupo contribuem para o
acoplamento excessivo
entre as classes ou mostram
o que acontece se o
acoplamento for substituído
pela delegação excessiva.
43. CADEIAS DE MENSAGEM
SINAIS E SINTOMAS
▸ No código, você vê uma série de chamadas parecidas com
$ a-> b () -> c () -> d ()
QUANDO IGNORAR
▸ O ocultamento de delegações agressivo pode causar
código em que é difícil ver onde a funcionalidade está
realmente ocorrendo.
45. INTERMEDIÁRIO
SINAIS E SINTOMAS
▸ Se uma classe executa apenas uma ação, delegando
trabalho para outra classe, por que ela existe?
QUANDO IGNORAR
▸ Não exclua o intermediário que foi criado por um motivo:
▸ Um intermediário pode ter sido adicionado para evitar
dependências interclasses.
▸ Alguns padrões de design criam o intermediário de
propósito (como Proxy e Decorator).
48. SUGESTÕES DE LEITURA
SUGESTÕES DE LEITURA
▸ Clean Code: A Handbook of Agile Software Craftsmanship
▸ Refactoring: Improving the Design of Existing Code
▸ Working Effectively with Legacy Code