Как мы можем создать собственную пользовательскую проверку

Я использую Grails 2.4.3 с базой данных Neo4j с SDN. Мы не используем плагин Grails, поэтому Grails не поддерживает Neo4j, и если мы создадим классы домена в пакете домена, это выдаст нам ошибку. Итак, мы создаем наш домен в пакете услуг. Мой первый вопрос:

Мы правы, или мы должны сделать что-то еще?

Другой мой вопрос заключается в том, чтобы обеспечить подтверждение этой концепции. Для этого мы используем Command Object. Итак, теперь нам нужна пользовательская проверка для уникальности. Я знаю, что мы можем использовать для этого Validator, но мы хотим, чтобы наша логика оставалась только в Services. Так можем ли мы создать что-то подобное?

static constraints = {
        username size: 5..15
        password size: 5..15, blank: false
        userEmail email: true
        }
username email:true 
userName name:unique

person Community    schedule 03.11.2014    source источник


Ответы (1)


Я не понимаю, почему вы так зациклены на том, чтобы использовать для этого сервис. Создание службы с аннотацией @Validateable и использование ее в качестве доменного класса, отличного от GORM, кажется очень странным. Если это работает, круто, но это все равно, что всю дорогу ехать на работу задним ходом. Вы доберетесь туда (пока не сожжете трансмиссию), но это будет напряженная поездка, глядя в зеркало заднего вида и видя, что все все время перевернуто.

Почему бы просто не поместить классы в разумный пакет в src/groovy и не аннотировать их? Вам просто нужно зарегистрировать их в Config.groovy, например.

grails.validateable.classes = [
     com.mycompany.myapp.User, com.mycompany.dto.Account]

Вы можете выполнить проверку уникальности, но не со стандартным ограничением unique. Это связано с GORM; он просматривает таблицу или резервное хранилище для вашего доменного класса и выполняет запрос уникальности для конкретного хранилища данных, но здесь это не применимо. Но вы можете легко сделать то же самое самостоятельно. Используйте пользовательский валидатор:

email validator: { value, obj ->
   // run a Neo4j query checking to see if value has
   // been used, the equivalent of
   // "select count(email) from person where email=?"
   // and return false if the count is not zero
}
person Burt Beckwith    schedule 03.11.2014