2012-04-25 25 views
0

特定のタイプのオブジェクト(たとえば、MyClass)を作成するファクトリクラスがあります。Javaでの動的クラスとパッケージのロードに最適なアプローチ

ファクトリクラスは特定のパッケージに属しており、テスト目的でそのパッケージ内の実装と新しいバージョンを動的に切り替える必要があります。

言って、例えば、元のパッケージであることをpack1

と新しいバージョンは、クラス名 pack1.Factorypack2.Factoryで、 pack2です。 pack1または pack2の選択は、プロパティファイルの単純なパラメータによって指定されます。さらに、 MyClassタイプは両方のパッケージで共通であり、プレーンなバニラJava(サードパーティライブラリなし)のみが使用されます。

pack1.Factoryまたはpack2.Factory(指定されたプロパティによって異なる)のいずれかをロードしてから、すべてのファクトリメソッドをリフレクションで呼び出すことを考えています。

は、最善のアプローチですか?

答えて

3

これは、コントロールの注入のためのほとんどの古典的な用途です。 Guiceをすぐに起動する必要があります。

IFactoryのようなインターフェイスが必要です。ファクトリメソッドcreateがあります。 2つのGuiceモジュールを作成します。一つはIFactoryからpack1.Factory、もう一つはpack2.Factoryです。もちろん、どちらの工場もIFactoryを実装する必要があります。

メインメソッドで、どのファクトリを使用するかを決定するパラメータを処理し、それぞれのモジュールの1つに基づいてインジェクタを作成します。

-1

これまで可能であった箇所は避けてください。これは、コードを理解しにくくし、リファクタリングが難しくなり、保守が難しくなります。

代わりに、ファクトリクラスにインターフェイスを実装させ、テストするファクトリのインスタンスを作成し、このインスタンスでテストを呼び出すことができます。

+0

私は同意しません。反射は、良心的に使用されていれば問題ありません。私はここでそれを使うことが非常に適切だと思います。 – ControlAltDel

関連する問題