首页 > 解决方案 > 从方法实例化类变量 - Java

问题描述

我知道从方法实例化类变量不是一个好主意,但不幸的是,我面临着没有其他解决方案的情况。我创建了一些自定义验证器,并且我有一个对象 ( rawField),其中填充了来自 GUI 的一些信息。为了填充该实例变量,我使用方法 validate from 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;
    }

}

标签: javadesign-patterns

解决方案


用方法调用的数据填充对象不一定是反模式。您的代码中有什么不对的是方法validate,它做的验证更多。首先它初始化变量,然后验证对象。最好将其称为类似populateAndValidate的名称或doInitialize从主体中删除,并确保它由客户端代码调用。字段的空检查rawField可以是验证过程的一部分。


推荐阅读