Logo ConstructiCat
CodeBust.
Parcourir la section ▾

Descendre le champ.

Problème

Un champ n'est-il utilisé que dans quelques sous-classes ?

Solution

Déplacez le champ vers ces sous-classes.

##Exemple

Avant
class Employee {
  String salesQuota;
}
class Salesman extends Employee {}
class Engineer extends Employee {}
Après
class Employee {}
class Salesman extends Employee {
  String salesQuota;
}
class Engineer extends Employee {}

##Pourquoi refactoriser

Bien qu'il ait été prévu d'utiliser un champ de manière universelle pour toutes les classes, en réalité le champ n'est utilisé que dans certaines sous-classes. Cette situation peut se produire lorsque des fonctionnalités prévues ne se concrétisent pas, par exemple.

Cela peut aussi se produire à la suite de l'extraction (ou de la suppression) d'une partie des fonctionnalités des hiérarchies de classes.

##Avantages

  • Améliore la cohérence interne de la classe. Un champ se trouve là où il est réellement utilisé.

  • Lorsque vous descendez le champ vers plusieurs sous-classes simultanément, vous pouvez faire évoluer les champs indépendamment les uns des autres. Cela crée certes une duplication de code, alors ne descendez les champs que lorsque vous avez réellement l'intention de les utiliser de différentes manières.

##Comment refactoriser

  1. Déclarez un champ dans toutes les sous-classes nécessaires.

  2. Supprimez le champ de la super-classe.