Mover Campo.
Um campo é usado mais em outra classe do que na sua própria classe.
Crie um campo em uma nova classe e redirecione todos os usuários do campo antigo para ele.
##Exemplo
class Account {
private double interestRate;
double interestForAmount(double amount) {
return amount * interestRate;
}
}
class AccountType {}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
-
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).
-
Crie o mesmo campo, com métodos de acesso, na classe destinatária.
-
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.
-
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.
-
Exclua o campo na classe original.