在这个用例中应该使用哪种设计模式?

时间:2011-08-04 18:06:44

标签: java validation design-patterns xmlbeans

我正在开发应用程序,我必须在某些xmlbean对象上编写自定义验证,基本上是为了查看具有正确值的字段是否存在。现在这些对象是从diff模式生成的。我正在使用xmlbeans针对模式提供的验证,但在进一步处理这些对象之前,还需要对这些对象进行更多业务验证。 有人可以为这个用例建议任何设计模式吗?

由于

2 个答案:

答案 0 :(得分:1)

定义您自己的验证器界面:

interface Validator <T extends XmlBean> {
    boolean validate(T bean);
}

为您正在处理的每个类实现它,您可以通过实现以下接口为每个bean类提供 factory 类来获取验证器

interface IValidatorFactory {
    public <T extends XmlBean> Validator<T> getValidator(Class<T> clazz);
}

class ValidatorFactory implements IValidatorFactory {
    private final Map<Class<? extends XmlBean>, Validator<? extends XmlBean>> map =
        new HashMap<Class<? extends XmlBean>, Validator<? extends XmlBean>>();

    @SuppressWarnings("unchecked")
    @Override
    public <T extends XmlBean> Validator<T> getValidator(Class<T> clazz) {
        return (Validator<T>)map.get(clazz);
    }

    public <T extends XmlBean> void registerValidator(Class<T> clazz, Validator<T> validator) {
        map.put(clazz, validator);
    }
}

答案 1 :(得分:0)

您可以将自己的自定义预设置和后置挂钩添加到生成的XmlBeans类中。要添加添加钩子,您需要创建.xsdconfig文件并提供可以调用的一些preSet()postSet()静态方法。

有关示例,请参阅:

https://www.ibm.com/developerworks/xml/library/x-xmlbeanse/?ca=dgr-eclipse-1

还有:

http://svn.apache.org/viewvc/xmlbeans/trunk/test/cases/xbean/extensions/prePostFeature/readOnlyBean/po.xsdconfig?revision=HEAD&view=markup

http://svn.apache.org/viewvc/xmlbeans/trunk/test/src/xmlobject/extensions/prePostFeature/readOnlyBean/existing/FooHandler.java?revision=HEAD&view=markup