验证工厂类设计

时间:2017-08-08 06:04:06

标签: java validation design-patterns

我想完成一项任务,我的工作流程是输入(args +配置) - >验证(验证后,返回操作) - >操作处理 - >输出。现在我在输入和验证部分工作。 args是命令行参数。我可以在加载配置文件后获取配置详细信息,并且将从命令行提供此文件路径。现在我将设计一个Validation Factory类,它将根据命令行参数指定的操作类型返回验证器实例,可能是内容验证器或状态更改验证器等。现在我被困在一步,即如何在输入步骤中拟合配置加载过程,以便我可以在验证步骤中验证所需的配置。

我正在分享我的代码 -

这是我的验证工厂类

public class ValidatorFactory {

    private ValidatorFactory() {
    }

    public static Validator getInstance(CommandLine cmd) throws BadArgumentException {
        String operationType = cmd.getOptionValue("op");
        ......
        switch (OperationType.valueOf(operationType.toUpperCase())) {
            case PUBLISH: validator = new StateChangeValidator(cmd);
            //here i want to pass configuration to the constructor, but i want to know how can i use my configuration loader which will load and returns me configuration. 

        }
        return validator;
    }

}

问题1)验证工厂是否意味着加载配置文件的完整上下文?我的意思是说,我可以在getinstance()部分使用我的加载器吗?这意味着什么?

这些是我的验证类: -

public abstract class AbstractValidator
        implements Validator {

    protected CommandLine cmd;

    protected Properties configuration;

    public AbstractValidator(CommandLine cmd, Properties configuration) {
        this.configuration = configuration;
        this.cmd = cmd;
    }

    ......

}

public class StateChangeValidator extends AbstractValidator {

    public StateChangeValidator(CommandLine cmd, Properties properties) {
        super(cmd, properties);
    }
   ......
}

这是我的装载程序类

public final class ConfigurationFileLoader {

    private static final Logger LOGGER = LoggerFactory.getLogger(ConfigurationFileLoader.class);

    public static final Properties getConfiguration(String filePath) throws BadFileException {
        //validate configuration file, load and return configuration

    }

}

我如何设计流程?因为配置文件的加载取决于命令行提供的一个输入。

1 个答案:

答案 0 :(得分:0)

好的,基于我对你正在做的事情的理解。我会在下面做出改动:

i)不要混合配置和验证。将其分解为两部分 - 配置加载程序和验证。

ii)每次都不要加载文件。您可以使用良好的驱逐策略维护缓存。我不认为您的配置文件位置每次都会改变。

iii)每次ValidatorFactory都不要创建新的验证器。您可以拥有每个验证器的单个实例。要做到这一点,你必须使它无国籍。有一个no-arg构造函数(就是全部)并且有setter来设置要验证的配置和数据。

iv)因此,在第一步中,您加载所有配置,然后获得验证器。设置cmd和配置,然后调用validate方法。