O documento discute vários tipos de "Code Smells", que são indícios de problemas em códigos, como condicionais complexas, longas listas de parâmetros, códigos duplicados e espalhamento de responsabilidades. Ele fornece exemplos de cada tipo de code smell e dicas para refatorar o código e remover esses problemas, como aplicar melhor os princípios da orientação a objetos e manter as responsabilidades separadas.
2. Code Smells - Código
Fedorento
Você já foi impedido de programar bem
por conta de um código sujo/ruim?
3. Code Smells - Código
Fedorento
Você já foi impedido de programar bem
por conta de um código sujo/ruim?
Você já entrou em uma classe e sentiu que
algo não cheirava bem com aquele código?
5. Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
● Mal concebido - Mal projetado - Mal pensado
6. Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
● Mal concebido - Mal projetado - Mal pensado
● Frágil - Redundante - Opaco - Falso sólido
7. Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
● Mal concebido - Mal projetado - Mal pensado
● Frágil - Redundante - Opaco - Falso sólido
● Impossível de ser mantido a longo prazo
11. Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
12. Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
13. Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
14. Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
15. Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
● Como resolver?
Extrair para métodos
Extrair para campos
17. Code Smells
● Message Chain (Couplers)
Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
18. Code Smells
● Message Chain (Couplers)
Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
Um objeto que chama outro objeto que chama outro objeto para ter uma
propriedade
19. Code Smells
● Message Chain (Couplers)
Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
Um objeto que chama outro objeto que chama outro objeto para ter uma
propriedade
21. Code Smells
● Message Chain (Couplers)
Solução 2 - Utilizando Hide delegate (Delegação para objeto do domínio ou intermediário)
22. Code Smells
● Message Chain (Couplers)
Extrair para método
Extrair para um campo
Extrair para um objeto do domínio - Hide Delegate
Só fale com vizinhos
Pense na leitura e na organização do código
24. Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
25. Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
26. Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
Dificulta a leitura
27. Orientação a objetos não está sendo bem utilizada
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
Dificulta a leitura
28. Orientação a objetos não está sendo bem utilizada
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
Dificulta a leitura
29. Code Smells
● Long parameter list (Bloaters)
Solução - Refatorando para uma classe
30. Code Smells
● Long list parameter (Bloaters)
Utilizar uma classe quando há múltiplos parâmetros
Usar no máximo 4 parâmetros por classe (Clean Code)
Utilizar parâmetros que sejam necessário para aquele método
Pensar em objeto do domínio
Pensar na leitura, limpeza e organização do código
34. Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
35. Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
36. Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Repetição de tipos, valores e algoritmos
37. Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Repetição de tipos, valores e algoritmos
Repetição de tipos
38. Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Repetição de tipos, valores e algoritmos
Repetição de dados
39. Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
Repetição de tipos, valores e algoritmos
Repetição de algoritmos
40. Code Smells
● Duplicate code (Dispensables)
Dicas e soluções para evitar:
Entender os cenários
Aplicar orientação a objetos
Refatorar classes e métodos para abranger o código duplicado
Manter organizado as responsabilidades (S.O.L.I.D)
43. Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
44. Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Muitos métodos em uma classe
Muitos testes / Testes desnecessários
45. Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Muitos métodos em uma classe
Muitos testes / Testes desnecessários
Qualquer mudança = Muitas mudanças
46. Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Muitos métodos em uma classe
Muitos testes / Testes desnecessários
Qualquer mudança = Muitas mudanças
Alterações simples = Bugs e erros
47. Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
Muitos métodos em uma classe
Muitos testes / Testes desnecessários
Qualquer mudança = Muitas mudanças
Alterações simples = Bugs e erros
Toda vez que isso estiver acontecendo, significa que tem algo errado
48. Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
49. Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Mover regras complexas (Message chain) para campos específicos
50. Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Mover regras complexas (Message chain) para campos específicos
Fazer teste antes de escrever o código
51. Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Mover regras complexas (Message chain) para campos específicos
Fazer teste antes de escrever o código
Organizar as ideias/regras/formas de fazer antes de fazer
52. Aplique S.O.L.I.D
Code Smells
Concluindo
Tenha disciplina
Defenda por um código limpo
Refatore se necessário
Saiba o que você está fazendo
Não tenha medo de code review
NÃO SEJA ORGULHOSO