【问题标题】:java design problem for validations验证的java设计问题
【发布时间】:2011-05-16 20:22:15
【问题描述】:

我有以下要求: 我有一个验证系统。我需要做的一件事是对 XML 文件执行验证,这意味着验证标记 X 是否等于给定值。我有不止一个可能的场景,并且在每个场景中都有一组不同的标签需要验证。

我不想在不同场景下测试相同的标签时重复相同的代码。

我正在尝试找出可以解决此问题的设计。

有什么想法吗?

谢谢。

【问题讨论】:

    标签: java xml validation


    【解决方案1】:

    我会为场景定义成对的 XPath 表达式和预期结果。

    然后,验证器将采用一个场景(对象),编译相关的表达式并将其应用于 xml 文档。这将选择一个元素,验证器将检查元素的内容是否与预期值匹配。

    【讨论】:

    • 感谢您的回答。预期结果是在运行时确定的。所以我无法预定义表达式和结果。
    • @dan - 没关系 - 然后只需存储 XPath 并在运行时告诉您的验证器 在哪里 获得预期结果或规则
    【解决方案2】:

    呃,委托给共享方法?喜欢:

    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
        }
    }
    

    【讨论】:

      【解决方案3】:

      一种方法是将 XML 解析为一个对象,然后根据 Bean Validation 规范 (JSR 303) 对其进行验证。 Hibernate Validator 是参考实现。* 您可以使用验证约束注释您的属性,然后指定 validation groups 以便某些字段在某些情况下得到验证。

      还有更多信息herehere

      *Hibernate Validator 与 Hibernate ORM 不同。它们的相关之处仅在于 Hibernate ORM 使用 Validator 进行约束检查。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 2015-10-13
        • 1970-01-01
        相关资源
        最近更新 更多