Ich habe eine Klasse, die einen Konstruktor hat, wo alle Argumente von GUICE injiziert werden.Java-Konstruktor mit Guice injizierten Feldern zusammen mit nicht injizierten Feldern
Public class Order {
private final ClassOne classOneObj;
private final ClassTwo classTwoObj;
@Inject
public order(ClassOne classOneObj, ClassTwo classTwoObj){
this.classOneObj = classOneObj;
this.classTwoObj = classTwoObj;
}
}
Jetzt möchte ich eine weitere Feld (sagen, Int-Status) Variable hinzufügen, die nicht injiziert werden kann.
Ist es eine gute Vorgehensweise, zuerst ein Objekt mit allen injizierten Parametern zu erstellen und dann das neue Feld festzulegen, das nicht mit einer Setter-Methode injiziert werden kann?
kam ich mit einem anderen Ansatz, wo ich eine Fabrik-Klasse erstellt, wie unten angegeben:
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);
}
}
Dann ist die neue Order-Klasse wie
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
}
Nun siehe mal das Auftrag-Objekt erstellen werde ich Erstellen Sie zuerst ein OrderFactory-Objekt, und erstellen Sie dann mit der Methode "createOrder" das Order-Objekt.
Ich bin am Ende schreiben Code schreiben. Nicht sicher, ob dies eine gute Übung ist. Kann jemand dazu vorschlagen, ob dieser Ansatz richtig ist oder es einen besseren Ansatz für dieses Problem gibt?
Ich las in Google Guice und festgestellt, dass es eine Funktion @Assisted für assistierte Injektion für solche Fälle gibt. Aber ich fand das komplex und konnte mich nicht davon überzeugen, ob ich in meinem Fall damit weitermachen sollte.
Vielen Dank im Voraus für jeden Vorschlag oder Anleitung.
Nach iluxa ist Ihre manuelle Herangehensweise an Fabriken in Ordnung, obwohl Sie die assistierte Injektion viel kürzer machen können. Die einzige Sache, die ich über Ihre manuelle Einspritzung ändern würde, ist, einen 'Provder' und 'Provider ' stattdessen zu spritzen, wenn Sie viele verschiedene Aufträge mit der gleichen OrderFactory erstellen möchten. Ansonsten sieht es gut aus. –