Pular para conteúdo

Estratégias de Refatoração

Histórico de revisão

Data Versão Descrição Autor(es)
06/12/2022 0.1 Criação do arquivo Lucas Queiroz

Critérios de refatoração

Nome Descrição Solução
Nomes insignificantes Nomes de funções, classes e variáveis, entre outros, que não revelam o propósito do objeto. Mudar o nome do objeto, de forma que ele revele o propósito.
Código duplicado Blocos de código que se repetem. Criar funções para executar o bloco de código.
Funções demasiadamente longas Funções que, por realizar várias tarefas, são muito longas. Extrair funções de dentro da função em questão.
Componentização(React) Qualquer bloco de código que seja recorrente em dois ou mais arquivos Transformar o bloco em componente

Exemplos

Nomes insignificantes

  • Antes (em Python):
for x in y:
    z()
  • Depois:
for aluno in turma:
    alocarEmEquipe(aluno)

Código duplicado

  • Antes:

(no arquivo AlunoService.js)

function validarDadosAluno(){
    let valido = Aluno.nome.validate();
    valido = valido && Aluno.idade.validate();
    valido = valido && Aluno.cpf.validate();
    ...
}

(no arquivo ProfessorService.js)

function validarDadosProfessor(){
    let valido = Professor.idade.validate();
    valido = valido && Professor.nome.validate();
    ...
}
  • Depois:

(no arquivo validacaoService.js)

function validarDados(Item){
    for(key in Item){
        if(Item[key].validate() !== true)
            return false;
    }
    return true;
}

(no arquivo AlunoService.js)

const valido = validarDados(Aluno);

(no arquivo ProfessorService.js)

const valido = validarDados(Professor);

Funções demasiadamente longas

  • Antes (em Python):
def cadastrarUsuario(usuario):
    for key in usuario:
        if(usuario[key].validate() != True)
            return False
    for key in usuario:
        usuario[key] = None 
    ... # Imagine que essa função tem mais 50 linhas.

    Api.post(usuario)
    return True
  • Depois:
def cadastrarUsuario(usuario):
    if not validarDados(usuario):
        return False
    limparFormulario(usuario)
    ... # agora, ao invés de 50 linhas, aqui tem apenas 3 linhas, cada uma com uma chamada de função.
    Api.post(usuario)

    return True