Avere il concatenamento implementato su bean è molto utile: non è necessario sovraccaricare costruttori, mega costruttori, fabbriche e offre una maggiore leggibilità. Non riesco a pensare a nessun aspetto negativo, a meno che tu non voglia che il tuo oggetto sia immutabile , nel qual caso non avrebbe comunque setter. Quindi c'è un motivo per cui questa non è una convenzione OOP?
public class DTO {
private String foo;
private String bar;
public String getFoo() {
return foo;
}
public String getBar() {
return bar;
}
public DTO setFoo(String foo) {
this.foo = foo;
return this;
}
public DTO setBar(String bar) {
this.bar = bar;
return this;
}
}
//...//
DTO dto = new DTO().setFoo("foo").setBar("bar");
myCustomDTO = DTOBuilder.defaultDTO().withFoo("foo").withBar("bar").Build();
Lo farei, in modo da non essere in conflitto con l'idea generale che i setter siano vuoti.
new Foo().setBar('bar').setBaz('baz')
sembra molto "fluente". Voglio dire, certo che potrebbe essere implementato esattamente allo stesso modo, ma mi aspetterei davvero di leggere qualcosa di più simileFoo().barsThe('bar').withThe('baz').andQuuxes('the quux')