2014-11-03 5 views
1

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

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

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

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

ответ

0

Я не понимаю, почему вы так зациклились на том, что вам нужно воспользоваться услугой. Создание сервиса, аннотированного с помощью @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 
}