No, non dovresti dichiararlo in XML, dovresti usare un processore di annotazione.
it is more like separating the data from the code
No, non lo è. Quello che stai proponendo è generare codice dai metadati. Se generi codice da dati, stai facendo parte di quel dato al tuo codice. È l'esatto opposto della separazione.
I think that all those "value objects" are the same
Sì. Tali classi tendono a essere molto ripetitive e fastidiose da scrivere e mantenere.
They should not be their own classes when there is no methods besides getters and setters
Cosa succede quando improvvisamente vuoi aggiungere un metodo in più? Sarà un po 'di lavoro fastidioso in più per convertirlo in una classe e quindi aggiungere il metodo. Oltre a questo, ora devi mantenere la classe manualmente.
Quindi cosa dovresti fare invece?
Un'opzione è FreeBuilder, link
Scrivi codice come questo:
@FreeBuilder
public abstract class Person {
public abstract String getFirstName();
public abstract String getLastName();
public abstract Date getBirthDate();
public String getFullName() {
return getFirstName() + " " + getLastName();
}
public static class Builder extends Person_Builder {}
}
FreeBuilder genererà automaticamente il codice per hashCode, equals e un builder in modo che tu possa fare:
Person person = new Person.Builder()
.setFirstName("Bill")
.setLastName("Gates")
.setBirthDate(birthDate)
.build()
L'aggiunta di nuovi campi è probabilmente più semplice della modifica di XML. Gli IDE supportano nativamente i processori di annotazione in modo che lavorino naturalmente con loro. Posso facilmente aggiungere metodi che non sono campi senza perdere la capacità del processore di generare automaticamente la funzione mancante.
Nel mio progetto corrente, ho scritto il mio proprio processore di annotazione che mi consente di scrivere codice come:
@AutoBean
class Person extends PersonImpl {
static class Fields {
String first;
String last;
Date birthDate;
}
}
AutoBean crea PersonImpl che fornisce getter, setter e builder per tutti i miei campi. Ogni volta che desidero che tutti gli oggetti di valore abbiano una nuova funzione, posso aggiungerla all'implementazione AutoBean e tutti ce l'hanno.
Fondamentalmente, lo standard di riferimento per la creazione di oggetti di valore in Java dovrebbe essere evitato, ma XML non è un buon modo per farlo. Utilizza un processore di annotazioni, uno dei quali fornisce ciò di cui hai bisogno o esegui il rollover.