Zaimplementowanie tworzenia łańcuchów na fasoli jest bardzo przydatne: nie trzeba przeciążać konstruktorów, mega konstruktorów, fabryk i zapewnia większą czytelność. Nie mogę wymyślić żadnych wad, chyba że chcesz, aby twój obiekt był niezmienny , w którym to przypadku i tak nie miałby żadnych ustawień. Czy jest więc powód, dla którego nie jest to konwencja 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();
Zrobiłbym to, aby nie kolidować z ogólną ideą, że setery są puste.
new Foo().setBar('bar').setBaz('baz')
wydaje się to bardzo „płynne”. Mam na myśli, że można go zaimplementować dokładnie w ten sam sposób, ale bardzo bym się spodziewał, że przeczytam coś więcejFoo().barsThe('bar').withThe('baz').andQuuxes('the quux')