Как правильно инициализировать класс с большим количеством полей? Имеется ORM (скорее, QueryBuilder), в котором есть метод getByID, возвращающий массив с полями одной строки таблицы из БД.
Нужно превратить этот массив в объект, у которого есть своя бизнес-логика.
Возьмем, к примеру, пользователей.
У пользователя около двух десятков полей, часть из них обязательные, часть - нет. В конструкторе класса User нужно перечислить все эти поля и передавать их при инициализации? А если нужно выбрать не все поля, а только часть?
Подскажите, пожалуйста, что почитать на эту тему. Возможно, есть какие-то существующие решения с открытым кодом, на которых можно поучиться?

21 Авг 2019 в 07:09
186 +1
0
Ответы
1

Есть несколько способов инициализации класса с большим количеством полей. Один из них - использовать конструктор с множеством параметров, передавать все поля при инициализации объекта. Однако этот способ может быть неудобным, особенно если нужно передавать не все поля, а только часть.

В таком случае можно использовать паттерн Builder. Этот паттерн позволяет создавать объекты шаг за шагом, устанавливая только нужные поля. Класс User может иметь вложенный класс UserBuilder, который будет использоваться для пошаговой инициализации объекта User.

Вот пример использования Builder паттерна для класса User:

public class User {
private String name;
private int age;
private String email;
// другие поля
public static class UserBuilder {
private String name;
private int age;
private String email;
// другие поля
public UserBuilder(String name) {
this.name = name;
}
public UserBuilder setAge(int age) {
this.age = age;
return this;
}
public UserBuilder setEmail(String email) {
this.email = email;
return this;
}
public User build() {
return new User(this);
}
}
private User(UserBuilder builder) {
this.name = builder.name;
this.age = builder.age;
this.email = builder.email;
// инициализация остальных полей
}
}

Теперь вы можете создавать объекты User следующим образом:

User user = new User.UserBuilder("John")
.setAge(30)
.setEmail("john@example.com")
.build();

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

Чтобы изучить паттерн Builder подробнее, вы можете почитать книгу "Design Patterns: Elements of Reusable Object-Oriented Software" (Gang of Four) или посмотреть дополнительные материалы по этой теме в сети.

Также существует множество open-source проектов на GitHub, где можно найти примеры использования паттернов проектирования, включая Builder. Возможно, вы найдете там полезные идеи и хорошие практики.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 718 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир