Você sabe o que é Bad Smell? Nunca vi nem comi eu só ouço falar !!

Thiago Chagas
4 min readDec 3, 2020

Fala pessoal Tudo bem com vocês? Hoje estarei começando mais uma série de artigos falando sobre um assunto que é muito importante na vida de Desenvolvedor. A saúde do seu código. Sim nosso código tem saúde, e você sabe verificar se ele está saudável?

O ideal para se escrever um código de forma correta, é lembrar dos ensinamentos do SOLID, Clean Code e usar a orientação à objetos de forma correta.

Caso você não tenha a mínima ideia do que seja o SOLID ou o Clean Code, vou deixar nas sessão de referências os links dos artigos que escrevi sobre os princípios do SOLID e um sobre o Clean Code do blog balta-io.

Existem alguns fatores como os prazos cada vez mais apertados, documentações abstratas, e até deficiência técnica que na maioria das vezes nos fazem criar códigos sem saúde e que não correspondem ao que foi pedido ou não é a melhor solução para aquele problema.

Para saber se o seu código é saudável, não precisa assistir House ou Greys Anatomy, quando essa saúde não existe, começamos a encontrar vários sintomas de que ele não está bem, encontramos os famosos “Bad Smell” ou “Code Smell”, então se prepare , higienize as suas mãos , coloque
sua máscara e vamos analisar nossos códigos.

Code Smell , Bad Smell?

De acordo com as palavras do saudoso Martin Fowler, um Bad Smell acontece quando o código é desenvolvido de uma forma pobre em seu design ou quando a implementação escolhida foi errada. Esses sintomas nos ajudam a verificar alguns problemas no código como:

  • Indicar ou corresponder a um problema profundo de um sistema.
  • Necessidade de refatoração.
  • Verificar quais áreas do código devem ser limpas.(Regra do escoteiro)

E como podemos lidar??

Então usaremos o princípio da surpresa mínima onde seguimos as seguintes regras:

  • Faça exatamente o que o usuário espera.
  • Seja Simples (KISS).
  • Seja claro , seja consistente.

Bad Smell e suas classificações

Existem algumas categorias que usamos para que sabermos que tipos de Bad Smell estamos lidando. Essas categorias são:

  • Bloaters
  • Object orientation abusers
  • Change preventers
  • Dispensables
  • Couplers
  • Obfuscators

Neste artigo iremos focar na categoria Bloaters .

Mas o que é um Bloater?

O Bloater é uma categoria que é encontrada sempre que um código cresce de forma desnecessária frequentemente. Isto com o tempo impacta na velocidade e processamento do código.

A prevenção para essa categoria é criar códigos enxutos e focados.

Um Bad Smell que pode ser classificado como um Bloater é o Primitive Obsession.

Primitive Obsession

Ocorre quando são usados muitos tipos primitivos ao invés de estruturas de abstrações. Pode tornar o código menos legível e sem intenção e isso torna a leitura muito difícil resultando em duplicações pois os dados não estão organizados em uma única estrutura.

Vamos ver um exemplo e aí tudo fica mais fácil né?

Na imagem acima temos uma classe chamada PrimitiveObsession que contém vários campos como tipos primitivos. Quando construímos classes contendo vários tipos primitivos, na maioria das vezes a primeira vista não parecem muito organizadas parecendo um código totalmente procedural e sem expressão. Veja o construtor contendo vários parâmetros, não fica tão legível assim.

Então vamos refatorar essa classe e resolver os problemas.

teste

A primeira coisa seria usar a Orientação à objetos para criar uma abstração que representa um objeto que faça a agregação dos campos fazendo sentido para o contexto. No nosso caso temos os campos Rua, Bairro, Cidade, Numero, Cep e Complemento, então criamos uma classe chamada Endereço que vai conter todas essas propriedades.

E após esse “refactor” a classe fica assim:

Note que a visibilidade da classe ficou elegante ,bem mais enxuta e mais simples de se identificar o conteúdo.

Espero que tenham gostado, no próximo artigo vamos falar sobre os Bad Smell da Família Obfuscators.

May the force be with you!

Referências

--

--

Thiago Chagas

Apaixonado por Tecnlogia, Games e Livros!!! Microsoft Certifed Professional (MCP),Microsoft Technology Associate (MTA), .Net Developer