/replace_query_with_parameter

Replace Query With Parameter

Primary LanguageJupyter Notebook

Replace Query with Parameter

🎓 College: Faculdade Metodista Granbery

👨‍🏫 Teacher: Marco Antônio - Github | Linkedin

📗 Book: Refatoração - Aperfeiçoando o design de códigos existentes - Martin Fowler

FOWLER, Martin. “Replace Query with Parameter” no código. In: REFATORAÇÃO: Aperfeiçoando o design de códigos existentes. 2. ed. [S. l.: s. n.], 2019. cap. 11.

Método

Objetivo desse método e retirar a consulta dentro função que está em uma dependência indesejada e trazer uma função que traga sempre o mesmo resultado que se chama transparência referencial.

Código

O código que escolhi foi uma atividade dado em aula pelo Professor Ricardo. Essa função recebe um parâmetro de nomes de coluna do dataset, os dados são verificados pela sua severidade e depois ocorre sua substituição dos valores ausentes de acordo com o seu tipo.

O código pode ser encontrado na plataforma Kaggle

Ferramentas

    pip install ipytest
    pip install testbook
    pip install pandas
    pip install jupyter

Objetivo da atividade

  1. Elabore ou escolha um código que a refatoração possa ser aplicada.
  2. Identifique o mau cheiro associado.
  3. Escreva os casos de teste e execute
  4. Aplique a refatoração
  5. Execute os casos de teste novamente
  6. Documente cada etapa para a apresentação

Mau Cheiro

Lista longa de parâmetros

O mau cheiro que encontrei dentro do código abaixo foi o lista longa de parâmetros, sendo que esse mal cheiro é para método ‘Replace Parameter with Query’, mas esse método e o inverso do ‘Replace Query with Paramater’, sendo assim o seu mal cheiro será o inverso. O mal cheiro será de consultas longas que trazem confusão para realizar a compreensão do código.

Procedimento

Código sem refatoração

funcaoSemRefatoracao.png

Teste sem refatoração

testeSemRefatoracao.png

Código novo aplicando a refatoração

Use Extrair variável (Extract Variable) no código da consulta para separá-lo do restante do corpo da função.

extractVariable.png

Aplique Extrair função (Extract Function) no código do corpo que não seja a chamada da consulta.

Dê à nova função um nome fácil de pesquisar, para poder renomeá-la depois.

extractFunction.png

Use Internalizar variável (Inline Variable) para se livrar da variável que você acabou de criar.

inlineVariable.png

Aplique Internalizar função (Inline Function) na função original.

inlineFunction.png

Renomeie a nova função dando-lhe o nome da função original.

renomear.png

Realização do Teste

testeComRefatoracao.png