Создание экземпляра переменной класса из метода - Java - PullRequest
0 голосов
/ 29 февраля 2020

Я знаю, что не стоит создавать экземпляр переменной класса из метода, но, к сожалению, я сталкиваюсь с ситуацией, когда у меня нет другого решения. Я создал несколько пользовательских валидаторов, и у меня есть объект (rawField), который заполнен некоторой информацией из GUI. Чтобы заполнить эту переменную экземпляра, я использую метод validate из javax.faces.Validator.

Так что я получаю информацию для каждого поля из GUI через это событие.

Мой вопрос: это хороший шаблон дизайна? Кто-нибудь лучше знает, как мне создать экземпляр этой переменной?

Родительский класс:

 public abstract class FormFieldValidator extends BaseValidator implements IFormFieldValidator, Validator {

            protected RawField rawField;

            @Override
            public abstract RawField doInitialize(Object inputObject);

            @Override
            public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {

            rawField = doInitialize(value);

            if (rawField == null) {

                throw new IllegalArgumentException("The field cannot be empty");

            }

            doBasicValidation();
            }
    }

Дочерний класс

@FacesValidator(Constants.Validators.USERNAME_VALIDATOR)

public class UsernameValidator extends FormFieldValidator {

    @Override
    public RawField doInitialize(Object guiField) {

    ValidationConditions validationConditions = new ValidationConditions

        .Builder(Entities.ParamsSize.USERNAME_MIN_LENGTH, Entities.ParamsSize.USERNAME_MAX_LENGTH)

            .setRegex(Constants.Regex.USERNAME_REGEX).setNullable(false).setUnique(true).build();


    FieldDetails fieldDetails = new FieldDetails(guiField, "Username");

    RawField rawField = new RawField(fieldDetails, validationConditions);

    return rawField;
    }

}

1 Ответ

1 голос
/ 29 февраля 2020

Это не обязательно антипаттерн для заполнения объекта данными при вызове метода. Что не правильно в вашем коде, так это то, что метод validate делает больше проверки. Сначала он инициализирует переменную, затем проверяет объект. Было бы лучше назвать его как populateAndValidate или удалить doInitialize из тела и убедиться, что он вызывается клиентским кодом. Нулевая проверка поля rawField может быть частью процесса проверки.

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