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

Descer Campo.

Problema

Um campo é usado apenas em algumas subclasses?

Solução

Mova o campo para essas subclasses.

##Exemplo

Antes
class Employee {
  String salesQuota;
}
class Salesman extends Employee {}
class Engineer extends Employee {}
Depois
class Employee {}
class Salesman extends Employee {
  String salesQuota;
}
class Engineer extends Employee {}

##Por que refatorar

Embora tivesse sido planejado usar um campo universalmente para todas as classes, na realidade o campo é usado apenas em algumas subclasses. Essa situação pode ocorrer quando funcionalidades planejadas não se concretizam, por exemplo.

Isso também pode ocorrer devido à extração (ou remoção) de parte da funcionalidade de hierarquias de classes.

##Benefícios

  • Melhora a coesão interna da classe. Um campo fica localizado onde é de fato usado.

  • Ao mover para várias subclasses simultaneamente, você pode desenvolver os campos de forma independente uns dos outros. Isso de fato cria duplicação de código, sim, então desça campos apenas quando você realmente pretende usar os campos de maneiras diferentes.

##Como refatorar

  1. Declare um campo em todas as subclasses necessárias.

  2. Remova o campo da superclasse.