2013-08-25 4 views
1
class User { 
    static constraints = { 
     password(unique:true, length:5..15, validator:{val, obj -> 
      if(val?.equalsIgnoreCase(obj.firstName)) { 
       return false 
      } 
     } 
    } 
} 

Я нахожу этот синтаксис действительно непонятным. Я потратил несколько дней, пытаясь научиться grails/groovy. Я знаю, что он делает, но я этого не понимаю.Синтаксис класса домена Grails

Может кто-нибудь объяснить, как это работает?

Что такое ограничения? Это закрытие, когда пароль называется функцией? Как это называется?

Что относительно валидатора, какой синтаксис это?

Как я уже сказал, я вижу, что он делает, я просто не понимаю, как это происходит.

ответ

2

Предисловие - В некоторых частях требуется базовое знание использования Groovy.

//Domain Class 
class User { 
    //A property of the domain class 
    //corresponding to a column in the table User. 
    String password 

    //Domain classes and Command objects are treated specially in Grails 
    //where they have the flexibility of validating the properties 
    //based on the constraints levied on them. 
    //Similar functionality can be achieved by a POGO class 
    //if it uses @Validateable transformation at the class level. 
    static constraints = { 
     //Constraints is a closure where validation of domain class 
     //properties are set which can be validated against when the domain class 
     //is saved or validate() is called explicitly. 
     //This is driven by AbstractConstraint and Constraint java class 
     //from grails-core 

     //Constraint on password field is set below. 
     //Here password is not treated as a method call 
     //but used to set the parameter name in the constraint class on which 
     //validation will be applied against. Refer AbstractConstraint 
     //for the same. 
     password(unique:true, size:5..15, validator:{val, obj -> 
      //Each of the key in the above map represents a constraint class 
      //by itself 
      //For example: size > SizeConstraint; validator > ValidatorConstraint 
      if(val?.equalsIgnoreCase(obj.firstName)) { 
       return false 
      } 
     } 
    } 
} 

Выше упомянуты основы того, как работают ограничения. Если вам нужно знать больше деталей, то здесь некоторые из источников, которые Вы определенно должны посетить, если вы получаете какие-либо дополнительные вопросы о его использовании:

Ob С уважением, SO - хорошее место, чтобы задавать вопросы, если вы застряли в любой реализации, связанной с ограничением или более. Не стесняйтесь использовать это сообщество, чтобы помочь вам преодолеть проблемные программные ситуации.

+0

Так что я понимаю, что это пароль, но если его метод не вызывает то, что это такое? Каким волшебством это работает. А что значит «вал?» имею в виду? Я никогда не видел этот синтаксис раньше, и книга, которую я читаю, не объясняет это. –

+2

В Grails много волшебства. Я думаю, что когда вы только начинаете, лучше всего просто принять это. Как только вы знаете свой путь вокруг рамки немного лучше, я предлагаю вам получить копию «Программирования Грааля» Берт Беквит (http://shop.oreilly.com/product/0636920024750.do). Это намного больше, чтобы объяснить, что происходит под капотом, чем большинство книг Grails. – rcgeorge23

+0

Хорошо, я думаю, что понял, что это сейчас ... val ?. является в основном нулевой версией val. правильно? и первый бит после валидатора val, obj - это переменные функции? –

0

У меня есть один и тот же вопрос, а также не удается найти синтаксис, описанный в книге/документе Groovy. Затем я google и найти этот блог: http://www.artima.com/weblogs/viewpost.jsp?thread=291467, который ответил на мой вопрос.

Смежные вопросы