グローバル変数から構成の一部を取得するいくつかのクラスに取り組んでいます。
class MyClass {
public void MyClass(Hashtable<String, String> params) {
this.foo = GlobalClass.GLOBALVAR.get("foo");
this.bar = GlobalClass.GLOBALVAR.get("bar");
this.params = params;
}
}
これにはいくつかの理由があります。GLOBALVAR はデータベースと通信していくつかの変数を取得するため、単体テストを作成するのが非常に難しくなります。もう 1 つの問題は、MyClass から継承するクラスが多数 (数十個) あるため、コンストラクターのシグネチャを簡単に変更できないことです。
私の現在の解決策は、 と の追加のデフォルト コンストラクターとセッター メソッドを作成するparams
ことfoo
です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;
}
}
私がやった方法以外に、これをリファクタリングする良い方法についてのアイデアはありますか? 私の他の考えは、ファクトリ メソッドを使用することですが、ポリモーフィックな置換の問題に遭遇するのではないかと心配しています。