Оптимизация параметров конструктора - PullRequest
1 голос
/ 23 сентября 2019

Я устанавливаю параметр непосредственно в DTO, вывод которого мы получаем из HQL

Ниже приведен HQL:

@Query(value = "SELECT new com.test.vos.CustomerDetails(firstname, lastName, address1, address2, address3, id, companyName, companyAddress, otherDetails) "
            + "FROM MstCustomer mc "
            + "INNER JOIN mc.mstAddress md "
            + "INNER JOIN mc.MstCompany mComapny "
            + "WHERE mc.mobileNo = :mobileNo ")
public List<CustomerDetails> getCustomerDetails(@Param("mobileNo") Integer mobileNo);

DTO:

public class CustomerDetails {
    private String firstName;
    private String lastName;
    private String address1;
    private String address2;
    private String address3;
    private String id;
    private String companyName;
    private String companyAddress;
    privatr String otherDetails;

    public CustomerDetails(String firstName, String lastName, String address1, String address2, String address3, String id, String companyName, String companyAddress, String otherDetails) {
        super();
        this.firstName = storeCode;
        this.lastName = lastName;
        this.address1 = address1;
        this.address2 = address2;
        this.address3 = address3;
        this.id = id;
        this.companyName = companyName;
        this.companyAddress = companyAddress;
        this.otherDetails = otherDetails;
    }

    // Getter and Setter
}

Прежде всего, код работает нормально, только проблема в том, что в его конструкторе 9 параметров, что превышает 7 авторизованных.

Как устранить это предупреждение?Какой будет наилучший подход?

1 Ответ

3 голосов
/ 23 сентября 2019

Используйте шаблон Builder , чтобы получить один параметр (строитель) в конструкторе

 private CustomerDetails(CustomerDetailsBuilder builder) {
    // ... set all fields using builder
 public static class CustomerDetailsBuilder
    //...update all parameters and build method

При этом используется дополнительный класс UserBuilder, который помогает нам в создании желаемого объекта User со всемиобязательные атрибуты и комбинация необязательных атрибутов, без потери неизменности.

Например

CustomerDetails customerDetails = new CustomerDetails.CustomerDetailsBuilder("Lokesh", "Gupta")
.address1("street 1")
.address2("Floor 2")
.address3("Fake address 1234")
.build();

Другой вариант - lombok's @ AllArgsConstructor

Создает конструктор из всех аргументов.Конструктор из всех аргументов требует один аргумент для каждого поля в классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...