すべての引数が GUICE によって注入されるコンストラクターを持つクラスがあります。
Public class Order {
private final ClassOne classOneObj;
private final ClassTwo classTwoObj;
@Inject
public order(ClassOne classOneObj, ClassTwo classTwoObj){
this.classOneObj = classOneObj;
this.classTwoObj = classTwoObj;
}
}
ここで、注入できないフィールド (たとえば、int ステータス) 変数をもう 1 つ追加したいと思います。
最初に注入されたすべてのパラメーターを使用してオブジェクトを作成し、次にセッター メソッドで注入できない新しいフィールドを設定することは良い方法ですか?
以下に示すように、ファクトリクラスを作成する別のアプローチを思いつきました。
public class OrderFactory {
private final ClassOne classOneObj;
private final ClassTwo classTwoObj;
@Inject
public order(ClassOne classOneObj, ClassTwo classTwoObj){
this.classOneObj = classOneObj;
this.classTwoObj = classTwoObj;
}
//getter methods for all the above variables
public ClassOne getclassOneObj(){
return classOneObj;
}
....
public Order createOrder(int status) {
return new Order(status, classOneObj, classTwoObj);
}
}
次に、新しい Order クラスは次のようになります
public class Order {
int status
private final ClassOne classOneObj;
private final ClassTwo classTwoObj;
public order(int status, ClassOne classOneObj, ClassTwo classTwoObj){
this.status = status
this.classOneObj = classOneObj;
this.classTwoObj = classTwoObj;
}
//getter methods for all these member variables
}
注文オブジェクトを作成するには、まず OrderFactory オブジェクトを作成し、次に "createOrder" メソッドを使用して Order オブジェクトを作成します。
私はボイラープレートコードを書くことになっています。これが良い習慣かどうかはわかりません。このアプローチが正しい場合、またはこの問題に対するより良いアプローチがある場合、誰かがこれについて提案できますか?
Google Guice を読んだところ、@Assisted という機能があり、そのような場合のアシスト インジェクションが可能であることがわかりました。しかし、私はそれが複雑であることに気づき、自分の場合にそれを使用する必要があるかどうかを確信できませんでした.
提案やガイダンスをお寄せいただきありがとうございます。