我想完成一项任务,我的工作流程是输入(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
}
}
我如何设计流程?因为配置文件的加载取决于命令行提供的一个输入。
答案 0 :(得分:0)
好的,基于我对你正在做的事情的理解。我会在下面做出改动:
i)不要混合配置和验证。将其分解为两部分 - 配置加载程序和验证。
ii)每次都不要加载文件。您可以使用良好的驱逐策略维护缓存。我不认为您的配置文件位置每次都会改变。
iii)每次ValidatorFactory
都不要创建新的验证器。您可以拥有每个验证器的单个实例。要做到这一点,你必须使它无国籍。有一个no-arg构造函数(就是全部)并且有setter来设置要验证的配置和数据。
iv)因此,在第一步中,您加载所有配置,然后获得验证器。设置cmd和配置,然后调用validate方法。