Какой шаблон проектирования следует использовать в этом случае использования? - PullRequest
1 голос
/ 04 августа 2011

Я работаю над приложением, в котором мне нужно написать пользовательскую проверку для некоторого объекта xmlbean, в основном, чтобы увидеть, есть ли поля с правильными значениями или нет. Теперь эти объекты генерируются из схемы diff. Я использую проверку, предоставляемую xmlbeans для схемы, но для этих объектов необходимо выполнить еще некоторые проверки бизнеса, прежде чем они будут обрабатываться дальше. Может кто-нибудь предложить какой-либо шаблон дизайна для этого варианта использования?

Спасибо

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Определите свой собственный валидатор интерфейс:

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

Реализуйте его для каждого класса, с которым вы имеете дело, вы можете предоставить фабрику класс, чтобы получить валидатор для каждого класса бинов путем реализации следующего интерфейса:

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);
    }
}
0 голосов
/ 05 августа 2011

Вы можете добавить свои собственные хуки до и после установки к вашим сгенерированным классам 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

...