Ho una libreria client in cui sto effettuando chiamate remote http al mio servizio di restituzione e quindi restituisco List<DataResponse>
al cliente che chiama la nostra libreria con la risposta che ottengo dal mio REST servizio insieme a eventuali errori se ci sono alcuni avvolto intorno all'oggetto DataResponse
.Come evitare di costruire costruttori lunghi
public class DataResponse {
private final String response;
private final boolean isLink;
private final TypeOfId idType;
private final long ctime;
private final long lmd;
private final String maskInfo;
// below are for error stuff
private final ErrorCode error;
private final StatusCode status;
// constructors and getters here
}
Qui è la mia classe ErrorCode
enum:
public enum ErrorCode {
// enum values
private final int code;
private final String status;
private final String description;
// constructors and getters
}
e qui è la mia classe StatusCode
enum:
public enum StatusCode {
SUCCESS, FAILURE;
}
Come si può vedere nella mia classe DataResponse
ho sacco di campi in modo In base a ciò ho un costruttore molto lungo e ogni volta che faccio un oggetto DataResponse
ho una linea grande con new DataResponse(.......)
. In futuro potrei avere più campi ma per ora ho solo questi campi.
C'è un modo migliore che posso utilizzare per creare un oggetto DataResponse
e quindi restituire List<DataResponse>
dalla mia libreria?
È possibile utilizzare il modello di builder. – YoungHobbit
http://stackoverflow.com/a/6395981/3885376 –
Non dipendono ancora da un costruttore. Hai molti campi? Sembra un lavoro per la decomposizione. Dai un'occhiata a [questa risposta] (http://stackoverflow.com/questions/33784390/object-oriented-design-how-important-is-encapsulation-when-therere-lots-of-da/33785266#33785266). Se ti senti ancora di passare troppi dati al costruttore in seguito, puoi utilizzare un modello di builder. Anche se la corretta decomposizione di solito fa il trucco. Trovo che i builder siano utili per i parametri opzionali (per evitare costruttori telescopici che forniscono valori predefiniti, piuttosto che evitare molti parametri) –