Всем привет! Хочу порассуждать над целесообразностью использования билдеров для не сложных объектов.
Для упрощения буду использовать аннотации lombok'a:
@Value
@Builder
Недолго погуглив, получаем, что builder — Отделяет конструирование сложного объекта от его представления так, что в результате одного и того же процесса конструирования могут получаться разные представления. Только ли для сложных объектов?
Рассмотрим на простом примере:
@Value
public class Info {
@Nullable String uuid;
@Nullable String email;
@Nullable String phone;
}
Довольно таки простой класс. На деле получаем иммутабельный объект, который инициализируется через конструктор.
Но, как мы видим, все поля nullable, и создание такие объектов будет выглядеть не очень красиво:
final Info info1 = new Info(null, "email@email.com", "79998888888");
final Info info2 = new Info("3d107928-d225-11ea-87d0-0242ac130003", null, null);
final Info info3 = new Info("3d107928-d225-11ea-87d0-0242ac130003 ", "email@email.com", null);
...
Безусловно, есть варианты:
- Объекты, где немного полей разных типов, можно завезти несколько конструкторов. Но это не решает проблему класса выше.
- Использовать setter'ы — субьективно, нагромождает код.
Читать полностью »