Java 用于验证文件的设计模式
我们必须验证包含各种配置参数的CSV文件。是否有任何标准的设计模式来进行这种类型的验证 更多详情:Java 用于验证文件的设计模式,java,design-patterns,validation,file-upload,Java,Design Patterns,Validation,File Upload,我们必须验证包含各种配置参数的CSV文件。是否有任何标准的设计模式来进行这种类型的验证 更多详情: 有不同类型的记录-每个记录都有自己的验证逻辑 某些记录与其他记录相互参照 记录的顺序是有规定的 有关于重复记录资格的规则 等 模板模式可能有助于: 你为你的验证建立了一个框架,然后把算法交给一个知道如何在不同点处理细节的代表 您可以使用该模式来验证记录。有一个抽象基类来表示记录,您可以使用 ,或创建各种记录类型的具体实例的简单工厂。 您的规格不完整。下面是实现策略模式的代码示例 对你的记录有一
- 有不同类型的记录-每个记录都有自己的验证逻辑
- 某些记录与其他记录相互参照
- 记录的顺序是有规定的
- 有关于重复记录资格的规则
- 等
您的规格不完整。下面是实现策略模式的代码示例 对你的记录有一个简单的假设。
接口验证器{
//由于不清楚记录的重要属性是什么,
//这以Record为例。
//修改以接受记录的相关属性
公共布尔验证(记录r);
}
类ConcreteValidator实现验证器{
//实现验证逻辑
}
//实现Compariable,以便可以在比较记录的规则中使用它
抽象类记录实现了可比较的{
受保护验证器v;
摘要无效集合验证器(验证器v);
公共布尔值isValid(){
返回v.validate(这个);
}
}
类ConcreteRecord扩展记录{
//或者在施工期间接受Validaor
//通过提供接受验证程序类型的构造函数
//即混凝土记录(验证器v)。。。
无效集合验证器(验证器v){
这个,v=v;
}
//可比接口方法的实现
公共int比较(最终记录o){…}
}
公开课考试{
公共静态void main(字符串[]args){
//将读入记录存储在列表中(允许重复)
List recordList=new ArrayList();
//这太简单了。您的记录创建模式可能是
//更复杂,可以使用工厂方法
//(或简单工厂)用于创建具体记录
记录r=新记录();
r、 setValidtor(新的ConcretedValidator());
if(r.isValid()){
//仅存储有效记录
记录列表。添加(r);
}
//对记录列表中存储的记录进行进一步处理
}
}
我知道我的一个朋友用它来验证这类文件。是的,这种模式被称为“标记语言”——XML就是一个很好的例子——它在JAVA中被广泛使用。如果失败了,您必须编写复杂的CSV解析器——这一点都不有趣。我们很遗憾地被CSV格式所困扰 interface Validator { // since it is not clear what are the attributes that matter for a record, // this takes an instance of Record. // Modify to accept relevant attribures of Record public boolean validate (Record r); } class ConcreteValidator implements Validator { // implements a validation logic } // implements Comparable so that it can be used in rules that compare Records abstract class Record implements Comparable<Record> { protected Validator v; abstract void setValidator(Validator v); public boolean isValid() { return v.validate(this); } } class ConcreteRecord extends Record { // alternatively accept a Validaor during the construction itself // by providing a constructor that accepts a type of Validator // i.e. ConcreteRecord(Validator v) ... void setValidator(Validator v) { this.v = v; } // implementation of method from Comparable Interface public int compareTo(final Record o) {... } } public class Test { public static void main(String[] args) { // Store the read in Records in a List (allows duplicates) List<Record> recordList = new ArrayList<Record>(); // this is simplistic. Your Record creation mode might be // more complex, And you can use a Factory Method // (or Simple Factory) for creation of ConcreteRecord Record r = new ConcreteRecord(); r.setValidtor(new ConcretedValidator()); if (r.isValid()) { // store only valid records recordList.add(r); } // do further processing of Records stored in recordList } }