Как объединить комплексную проверку бизнеса с JSR-303? - PullRequest
0 голосов
/ 15 июля 2011

Я застрял с проверкой в ​​моем текущем случае использования.Мое приложение имеет стандартную структуру (WEB <-> EJB3 Services <-> EJB3 DAO <-> DB).У меня есть объект, к которому применены аннотации проверки.

@Entity
class PhoneNumber {

    ...

    private NumberType numberType;
}

, где

enum NumberType {
    FIXED,
    MOBILE,
    ANY
}

Теперь у меня есть новое правило проверки, которое нужно применить.При обновлении PhoneNumber не должно быть возможности изменить NumberType на ANY, если ранее было установлено значение FIXED или MOBILE.

Мои правила проверки бинов проверяются непосредственно перед операциями с БД, и вышеприведенное правило должно применяться на уровне обслуживания (по крайней мере, я так думаю), чтобы иметь доступ к БД для сравнения предыдущей версии объекта.Но если бин еще не проверен, я вынужден вручную проверить, если, например, numberType не равно нулю.

Можете ли вы дать мне несколько советов или общих правил, как работать с более сложными проверками бизнес-процессов (не только проверкой одногозначения поля изолированно) при использовании Bean Validation?

Ответы [ 2 ]

3 голосов
/ 15 июля 2011

Я не думаю, что Bean Validation является правильным решением для реализации такого рода бизнес-логики.

Вместо этого вы можете реализовать эту проверку в методе setNumberType() объекта PhoneNumber.Там у вас есть старое значение под рукой, и по сравнению с реализацией на уровне сервиса нет никакой возможности выполнить недопустимый переход состояния, обходя (случайно или преднамеренно) сервис, реализующий проверку.

0 голосов
/ 15 июля 2011

Здесь вы можете найти хорошее описание того, как написать пользовательский валидатор, который может выполнять валидацию "в поле".

...