Je travaille sur des classes qui obtiennent une partie de leur configuration à partir de variables globales, par ex.Classes de refactoring utilisant des variables globales
class MyClass {
public void MyClass(Hashtable<String, String> params) {
this.foo = GlobalClass.GLOBALVAR.get("foo");
this.bar = GlobalClass.GLOBALVAR.get("bar");
this.params = params;
}
}
Cela est mauvais pour deux raisons, parle de GLOBALVAR à une base de données pour obtenir certaines variables, ce qui rend vraiment difficile de faire des tests unitaires. L'autre problème est que j'ai plusieurs (douzaines) de classes qui héritent de MyClass, donc je ne peux pas facilement changer la signature du constructeur.
Ma solution actuelle consiste à créer un constructeur par défaut supplémentaire et des méthodes de réglage pour params
, foo
et bar
.
class MyClass {
// Other code still here for backwards compatibility.
public void MyClass() {
// Do nothing much.
}
public void setParams(Hashtable<String, String> params) {
this.params = params;
}
public void setFoo(Foo foo) {
this.foo = foo;
}
public void setBar(Bar bar) {
this.bar = bar;
}
}
Des idées sur un bon moyen de refactoriser cela, en plus de la façon dont je l'ai fait? Mon autre pensée serait d'utiliser une méthode d'usine, mais j'ai peur de rencontrer des problèmes de substitution polymorphique.
Avez-vous également le contrôle total des sous-classes (ce qui signifie que vous pouvez apporter des modifications à toutes les sous-classes)? – TofuBeer
Oui, toutes les sous-classes sont également modifiables. – Ryan