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

Mover Campo.

Problema

Um campo é usado mais em outra classe do que na sua própria classe.

Solução

Crie um campo em uma nova classe e redirecione todos os usuários do campo antigo para ele.

##Exemplo

Antes
class Account {
  private double interestRate;

  double interestForAmount(double amount) {
    return amount * interestRate;
  }
}
class AccountType {}
Depois
class Account {
  private AccountType type;

  double interestForAmount(double amount) {
    return amount * type.getInterestRate();
  }
}
class AccountType {
  private double interestRate;
  double getInterestRate() { return interestRate; }
}

##Por que refatorar

Muitas vezes os campos são movidos como parte da técnica Extrair Classe. Decidir em qual classe deixar o campo pode ser difícil. Aqui vai a nossa regra prática: coloque um campo no mesmo lugar que os métodos que o usam (ou então onde está a maioria desses métodos).

Essa regra ajudará em outros casos em que um campo simplesmente está no lugar errado.

##Como refatorar

  1. Se o campo for público, a refatoração será muito mais fácil se você tornar o campo privado e fornecer métodos de acesso públicos (para isso, você pode usar Encapsular Campo).

  2. Crie o mesmo campo, com métodos de acesso, na classe destinatária.

  3. Decida como você vai se referir à classe destinatária. Talvez você já tenha um campo ou método que retorne o objeto apropriado; se não, será preciso escrever um novo método ou campo para armazenar o objeto da classe destinatária.

  4. Substitua todas as referências ao campo antigo por chamadas apropriadas aos métodos da classe destinatária. Se o campo não for privado, cuide disso na superclasse e nas subclasses.

  5. Exclua o campo na classe original.