Ведення ланцюга на бобах дуже зручно: не потрібно перевантажувати конструкторів, мегаконструкторів, заводів, а також підвищує читабельність. Я не можу придумати жодних недоліків, якщо ви не хочете, щоб ваш об’єкт був непорушним , і в такому випадку у нього все одно не було б ніяких сетерів. Тож є причина, чому це не конвенція ООП?
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();
Я б це зробив, щоб не суперечити загальній думці, що сетери недійсні.
new Foo().setBar('bar').setBaz('baz')
відчуває себе дуже «вільно». Я маю на увазі, звичайно, це може бути реалізовано точно так само, але я дуже сподіваюся прочитати щось на кшталтFoo().barsThe('bar').withThe('baz').andQuuxes('the quux')