CLEAN CODE
AUGUSTO ROSA
Code Smells - Código
Fedorento
Você já foi impedido de programar bem
por conta de um código sujo/ruim?
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?
Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
● Mal concebido - Mal projetado - Mal pensado
Code Smells
● Classes, objetos e métodos Fedorosos ( Fedorento
e Horroroso )
● Mal concebido - Mal projetado - Mal pensado
● Frágil - Redundante - Opaco - Falso sólido
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
Code Smells
Code Smells
Conditional Complexity (Object Orientation Abuser)
Code Smells
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
Code Smells
● Conditional Complexity (Object Orientation Abuser)
Princípios da orientação a objetos aplicada de maneira errada
Lista de condições complexas
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
Code Smells
Message Chain (Couplers)
Code Smells
● Message Chain (Couplers)
Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
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
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
Code Smells
● Message Chain (Couplers)
Solução 1 - Refatorando para campos próprios
Code Smells
● Message Chain (Couplers)
Solução 2 - Utilizando Hide delegate (Delegação para objeto do domínio ou intermediário)
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
Code Smells
Long parameter list (Bloaters)
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Code Smells
● Long parameter list (Bloaters)
Múltiplos parâmetros - Longa lista de parâmetros
Parâmetros repetidos em várias chamadas na classe
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
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
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
Code Smells
● Long parameter list (Bloaters)
Solução - Refatorando para uma classe
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
Code Smells
Long parameter list (Bloaters)
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Code Smells
● Duplicate code (Dispensables)
Códigos repetidos
Códigos desnecessários
Interferem na manutenção do código
Código sujo e desorganizado
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
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
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
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
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)
Code Smells
Shotgun Surgery (Change Prevents)
Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Code Smells
● Shotgun Surgery (Change Prevents)
Muitos métodos em uma classe
Muitas classes para uma regra
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
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
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
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
Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Code Smells
● Shotgun Surgery (Change Prevents)
Dicas para evitar:
Mover métodos para seus contextos
Mover regras complexas (Message chain) para campos específicos
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
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
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
Code Smells
Referências
https://martinfowler.com/bliki/CodeSmell.html
https://refactoring.guru/
https://simpleprogrammer.com
https://refactoring.com/
Clean Code: A Handbook of Agile Software
Craftsmanship
Design Patterns: Elements of Reusable
Object-Oriented Software
OBRIGADO !

Code smells - Um indicador de código mal feito

  • 1.
  • 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?
  • 4.
    Code Smells ● Classes,objetos e métodos Fedorosos ( Fedorento e Horroroso )
  • 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
  • 8.
  • 9.
  • 10.
    Conditional Complexity (ObjectOrientation Abuser) Code Smells
  • 11.
    Code Smells ● ConditionalComplexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada
  • 12.
    Code Smells ● ConditionalComplexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada Lista de condições complexas
  • 13.
    Code Smells ● ConditionalComplexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada Lista de condições complexas
  • 14.
    Code Smells ● ConditionalComplexity (Object Orientation Abuser) Princípios da orientação a objetos aplicada de maneira errada Lista de condições complexas
  • 15.
    Code Smells ● ConditionalComplexity (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
  • 16.
  • 17.
    Code Smells ● MessageChain (Couplers) Acoplamento de várias coisas (Funções, chamadas, métodos) em um só local
  • 18.
    Code Smells ● MessageChain (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 ● MessageChain (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
  • 20.
    Code Smells ● MessageChain (Couplers) Solução 1 - Refatorando para campos próprios
  • 21.
    Code Smells ● MessageChain (Couplers) Solução 2 - Utilizando Hide delegate (Delegação para objeto do domínio ou intermediário)
  • 22.
    Code Smells ● MessageChain (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
  • 23.
  • 24.
    Code Smells ● Longparameter list (Bloaters) Múltiplos parâmetros - Longa lista de parâmetros
  • 25.
    Code Smells ● Longparameter list (Bloaters) Múltiplos parâmetros - Longa lista de parâmetros Parâmetros repetidos em várias chamadas na classe
  • 26.
    Code Smells ● Longparameter 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 objetosnã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 objetosnã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 ● Longparameter list (Bloaters) Solução - Refatorando para uma classe
  • 30.
    Code Smells ● Longlist 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
  • 31.
  • 32.
    Code Smells ● Duplicatecode (Dispensables) Códigos repetidos
  • 33.
    Code Smells ● Duplicatecode (Dispensables) Códigos repetidos Códigos desnecessários
  • 34.
    Code Smells ● Duplicatecode (Dispensables) Códigos repetidos Códigos desnecessários Interferem na manutenção do código
  • 35.
    Code Smells ● Duplicatecode (Dispensables) Códigos repetidos Códigos desnecessários Interferem na manutenção do código Código sujo e desorganizado
  • 36.
    Code Smells ● Duplicatecode (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 ● Duplicatecode (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 ● Duplicatecode (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 ● Duplicatecode (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 ● Duplicatecode (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)
  • 41.
    Code Smells Shotgun Surgery(Change Prevents)
  • 42.
    Code Smells ● ShotgunSurgery (Change Prevents) Muitos métodos em uma classe
  • 43.
    Code Smells ● ShotgunSurgery (Change Prevents) Muitos métodos em uma classe Muitas classes para uma regra
  • 44.
    Code Smells ● ShotgunSurgery (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 ● ShotgunSurgery (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 ● ShotgunSurgery (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 ● ShotgunSurgery (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 ● ShotgunSurgery (Change Prevents) Dicas para evitar: Mover métodos para seus contextos
  • 49.
    Code Smells ● ShotgunSurgery (Change Prevents) Dicas para evitar: Mover métodos para seus contextos Mover regras complexas (Message chain) para campos específicos
  • 50.
    Code Smells ● ShotgunSurgery (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 ● ShotgunSurgery (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 Tenhadisciplina 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
  • 53.
    Code Smells Referências https://martinfowler.com/bliki/CodeSmell.html https://refactoring.guru/ https://simpleprogrammer.com https://refactoring.com/ Clean Code:A Handbook of Agile Software Craftsmanship Design Patterns: Elements of Reusable Object-Oriented Software OBRIGADO !