Обновление объекта с помощью шаблона строителя - PullRequest
0 голосов
/ 28 февраля 2019

Я недавно узнал об этом шаблоне и попытался внедрить его в свой проект.Он делает то, что предполагает.Тем не менее, попытался найти хорошее решение, чтобы обновить его.Придумал одно решение, и я хотел бы знать, является ли оно «приемлемым».

Единственное отличие, которое я сделал, - я создал еще один конструктор внутри класса Builder, который принимает вызывающий объект в качестве параметра:

public Builder (User user) {
    this.userID = user.getUserID();
    this.userName = user.getUserName();
    ...
    //and so on

и в основном методе

создание объекта:

User user = new User.Builder("mandatory params")
                    .email("some email")
                    .build();

и обновление:

user = new User.Builder(user).phoneNumber("my number").build();

Является ли этот подход приемлемым?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Это хорошо, если вы хотите создать нового пользователя с полями, скопированными от другого пользователя, с некоторыми изменениями:

anotherUser = new User.Builder(user).phoneNumber("my number").build();

Но если вы назначаете новый объект обратнопеременная user предполагает, что вы обновляете существующего пользователя.Чтобы обновить, вы создаете совершенно новый объект и копируете поля, что очень неэффективно.Вы должны использовать сеттеры.

0 голосов
/ 28 февраля 2019

вы должны использовать сеттер и геттер, как только у вас будет пустой или частично заполненный объект, не имеет значения.

Также, на мой взгляд, лучше использовать Джексон objectMapper по сравнению со строителемшаблон, он автоматически обрабатывает новые параметры без добавления дополнительной строки кода в шаблон построителя, а также больше clean code.

...