我有以下要求: 我有一个验证系统。我需要做的事情之一是对XML文件进行验证,即验证该标签X是否等于给定值。我有多种可能的情况,每种情况下都有一组需要验证的不同标签。java验证设计问题
我不想在不同场景下测试相同标签时重复相同的代码。
我想弄清楚会解决这个问题的设计。
任何想法?
谢谢。
我有以下要求: 我有一个验证系统。我需要做的事情之一是对XML文件进行验证,即验证该标签X是否等于给定值。我有多种可能的情况,每种情况下都有一组需要验证的不同标签。java验证设计问题
我不想在不同场景下测试相同标签时重复相同的代码。
我想弄清楚会解决这个问题的设计。
任何想法?
谢谢。
我会为这些场景定义XPath表达式对和预期结果。
验证器然后将采取一个场景(对象),编译并将关联的表达式应用到xml文档。这将选择一个元素,验证器会检查元素的内容是否与期望值匹配。
呃,委托给共享方法?像:
void validateAppleScenario(Xml xml) {
validateFruit(xml);
// validate apples specific tags
}
void validateBanana(Xml xml) {
validateFruit(xml);
// validate banana specific tags
}
void validateFruit(Xml xml) {
// validate tags common to all fruit
}
或者如果你喜欢验证是单独的对象,你可以使用子类型:
interface Validator {
void validate(Xml xml);
}
class FruitValidator implements Validator {
void validate(Xml xml) {
// validate tags common to all fruit
}
}
class AppleValidator extends FruitValidator {
void validate(Xml xml) {
super.validate(xml);
// validate tags specific to apples
}
}
一种方法是将XML解析成一个对象,然后按照豆验证它验证规范(JSR 303)。 Hibernate Validator是参考实现。*您可以使用验证约束对您的属性进行注释,然后指定validation groups,以便在某些情况下验证某些字段。
* Hibernate Validator与Hibernate ORM不同。它们只与Hibernate ORM使用Validator进行约束检查有关。
感谢您的回答。预期的结果在运行时确定。所以我不能预定义表达式和结果。 – dan 2011-05-16 21:08:50
@dan - 无所谓 - 然后只存储XPath并在运行时告诉验证程序*其中*用于获取预期结果或规则 – 2011-05-16 21:52:40