Ho una classe con un costruttore in cui tutti gli argomenti vengono iniettati da GUICE.Costruttore Java con campi iniettati da Guice insieme a campi non iniettati
Public class Order {
private final ClassOne classOneObj;
private final ClassTwo classTwoObj;
@Inject
public order(ClassOne classOneObj, ClassTwo classTwoObj){
this.classOneObj = classOneObj;
this.classTwoObj = classTwoObj;
}
}
Ora, voglio aggiungere un'altra variabile di campo (ad esempio, stato int) che non può essere iniettata.
È buona norma creare un oggetto in primo luogo con tutti i parametri iniettati e quindi impostare il nuovo campo che non può essere iniettato con metodo setter?
mi si avvicinò con un altro approccio in cui ho creato una classe di fabbrica come il seguente: Quindi la nuova classe Order sarà simile
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
}
Ora per creare l'oggetto dell'ordine lo farò
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);
}
}
prima creare un oggetto OrderFactory e quindi utilizzare il metodo "createOrder". Creerò l'oggetto Order.
Sto finendo con la scrittura di codice standard. Non sono sicuro se questa è una buona pratica. Qualcuno può suggerire questo se questo approccio è corretto o c'è un approccio migliore per questo problema?
ho letto in Google Guice e ha trovato c'è una caratteristica @Assisted per l'iniezione assistita per tali casi. Ma ho trovato questo complesso e non riuscivo a convincermi se dovessi andare con quello nel mio caso.
Grazie in anticipo per qualsiasi suggerimento o guida.
Facendo eco iluxa, il tuo approccio manuale per fabbriche va bene, anche se è possibile far funzionare l'iniezione assistita in un modo molto più breve. L'unica cosa che cambierei nella tua iniezione manuale è iniettare un 'Provder' e 'Provider ', invece, se vuoi creare molti Ordini diversi con lo stesso OrderFactory. Altrimenti, sembra fantastico. –