Logotipo do ConstructiCat
CodeBust.
Explorar a seção ▾

Adicionar Parâmetro.

Problema

Um método não tem dados suficientes para realizar certas ações.

Solução

Crie um novo parâmetro para passar os dados necessários.

##Exemplo

Antes
void charge() {
  bank.transfer(amount);
}
Depois
void charge(Date asOf) {
  bank.transfer(amount, asOf);
}

##Por que refatorar

Você precisa fazer alterações em um método e essas alterações exigem adicionar informações ou dados que antes não estavam disponíveis para o método.

A alternativa é adicionar um novo campo privado que contenha os dados de que o método precisa. Um parâmetro é preferível quando os dados são necessários apenas ocasionalmente ou mudam com frequência, de modo que não faz sentido mantê-los no objeto o tempo todo. Caso contrário, adicione um campo privado e preencha-o com os dados necessários antes de chamar o método.

##Benefícios

  • O método recebe explicitamente de quem o chama os dados de que precisa: a dependência fica visível na sua assinatura, em vez de ficar escondida no estado do objeto.

  • Dados ocasionais ou que mudam com frequência não precisam ficar guardados no objeto o tempo todo, então a classe não acumula campos que só servem para uma única chamada.

##Como refatorar

  1. Verifique se o método está definido em uma superclasse ou subclasse. Se o método estiver presente nelas, você precisará repetir todos os passos nessas classes também.

  2. O passo a seguir é fundamental para manter seu programa funcional durante o processo de refatoração. Crie um novo método copiando o antigo e adicione a ele o parâmetro necessário. Substitua o código do método antigo por uma chamada ao novo método. Você pode atribuir qualquer valor ao novo parâmetro (como null para objetos ou zero para números).

  3. Encontre todas as referências ao método antigo e substitua-as por referências ao novo método.

  4. Exclua o método antigo. A exclusão não é possível se o método antigo fizer parte da interface pública. Nesse caso, marque o método antigo como obsoleto (deprecated).