Como você avalia se a sua codebase possui oportunidades para refatoração?
Abaixo, listo alguns dos smells que podem ser encontrados nos nossos códigos e que são oportunidades para refatorar e deixar o código mais limpo, claro e legível.
Código morto (sem uso)
Quando?
Código que não está sendo chamado ou referenciado. Comentários que não são úteis.
O que fazer?
Deletar. “Mas e se no futuro eu precisar?” é pra isso que existe controle de versão!
Introdução de Objeto Parâmetro
Quando?
Um conjunto ou sub conjunto de parâmetros que com frequência é utilizado.
O que fazer?
Substituir por um objeto que contemple estes parâmetros.
Decomposição de Condicional
Quando?
Quando existem um encadeamento de condicionais (if’s) e diversos fluxos alternativos.
O que fazer?
Extrair métodos para as condições (if), as consequências (then) e alternativas (else) e fazendo com que o nome dos métodos representem o propósito de cada uma das diferentes partes do código.
Preservar Objeto
Quando?
Você está manipulando diversos valores/atributos de um objeto e passando esses valores por parâmetro para outro método.
O que fazer?
Passe por parâmetro o objeto inteiro.
Extrair uma nova Classe
Quando?
Quando uma classe está desempenhando uma função que deve ser desempenhada por outras duas classes.
O que fazer?
Crie uma nova classe, e mova os atributos e métodos pertinentes para a nova classe criada.
Elevar um método
Quando?
Quando subclasses diferentes possuem métodos que geram retornos idênticos.
O que fazer?
Mova esse método para a classe “pai” (superclass).
Extrair método
Quando?
Uma porção de código que poderia ser agrupada em um método com uma responsabilidade bem definida.
O que fazer?
Extraia esse código para um novo método e garanta que o nome do método explica a responsabilidade e intenção do novo método criado.
Remover método (inline method)
Quando?
O conteúdo de um método é tão claro quanto o nome do mesmo e o seu tamanho é muito pequeno (uma ou pouquíssimas linhas).
O que fazer?
Adicionar o conteúdo do método para quem chama o método e remover o mesmo.
Renomear método
Quando?
O nome do método não representa o seu comportamento ou responsabilidade.
O que fazer?
Alterar o nome do método para que seja entendível.
Mover método
Quando?
O método utiliza ou está sendo utilizado por mais funcionalidades de outra classe do que a classe em que ele foi definido.
O que fazer?
Crie um novo método com conteúdo similar ao original. Ou faça com que o método antigo delegue a responsabilidade para o novo método criado ou remova o método antigo.
Mover atributo
Quando?
Um atributo é utilizado mais por outra classe do que a classe em que ele foi originalmente definido.
O que fazer?
Criar um novo atributo semelhante na classe em que ele é mais utilizado e substituir todos os usos do atributo originalmente declarado na primeira classe.
Renomear atributo ou variável
Quando?
Quando o nome do atributo ou variável não representar a sua real intenção, quando não for claro.
O que fazer?
Alterar o nome do atributo ou variável para que seja entendível.
Outros exemplos de smells:
- Código que viola regras de Orientação a Objetos (caso o paradigma seja OO).
- Código difícil de se modificar ou que o time considere “arriscado” efetuar alterações.
- Métodos e/ou Classes que sejam muito extensas, com muita lógica ou muita responsabilidade.
- Código com muitas dependências, pode ser um indício de alto acoplamento.