Ho un tipo di dati immutabile piuttosto complesso che sto usando un oggetto costruttore per creare un'istanza. Attualmente, ho un setup in cui analizzo un file, settando vari campi nel mio builder e poi costruisco l'oggetto. Tuttavia, i file che sto usando sono soggetti a errori, quindi prima voglio fare qualche verifica sui miei oggetti non costruiti. Ed è importante notare che non voglio lanciare un'eccezione se un oggetto non supera la verifica, poiché ciò non significa che sia non valido , solo errato.
Il modo in cui sono abituato a vedere i costruttori, però, è che sono "di sola scrittura". Ad esempio, la classe ImmutableList.Builder
di Guava non ti consente di visualizzare i dati che ti sono stati inviati, portandomi a utilizzare ArrayList
s come builder in occasione della necessità di modificare i dati prima di bloccarli.
In alternativa, suppongo che potrei andare avanti e costruire i miei oggetti con errori, quindi creare un nuovo builder precaricato con i dati dell'oggetto costruito, ispezionare i dati, modificare e ricostruire. Questo sembra dispendioso e inelegante, però.
È considerato un odore di codice mettere i metodi getter sui tuoi oggetti builder? Intuitivamente, mi sembra un po 'strano, ma più di una volta mi sono trovato di fronte a questo tipo di problema, che spesso mi spinge a mantenere una copia accessibile di alcuni dei dati che sto passando al builder in modo che io possa guardalo più tardi Basta avere un getter per semplificare le cose.