Services e Validators
11/06/2013 14:33
0
Bom dia pessoal!

Estou desenvolvendo um projeto em Grails e me deparei com o seguinte problema:
Eu criei uma classe 'Validators' para empaotar os validators customizados da minha aplicação, porém dentro do validator gostaria de chamar uma service, como mostrado abaixo:


static final contaExistente = { value, command ->
if(contaService.buscarPorLogin(command.login)){
return ['invalid.contaExistente']
}




Após pesquisar sobre o assunto,encontrei a seguinte solução:

class Validators {

static final contaExistente = { value, command ->
if(command.contaService.buscarPorLogin(command.login)){
return ['invalid.contaExistente']

}
}


Colocar o service no command para realizar a injeção corretamente e chamar o service a partir do command. Pore? ao avaliar essa solução, achei um tanto 'esquisito'.

Qual seria a melhor solução para esse tipo de problema? Existe alguma outra maneira mais eficiente de empacotar validators?

Tópico sobre reutilização de validators (http://santograils.org/2013/05/27/reutilizacao-com-grails-validators/)

No aguardo.

Abraços!
Tags: services validator command


0
Boa tarde Victor.

Não existe problema nisso. O command nada mais é que um objeto que é responsável por encapsular e transferir os dados da sua camada de view até a controller, no caso de um formulário possuir muitas Domains envolvidas.

Esta é uma prática comum para quando se utiliza o spring security (por exemplo), para validadores de password. Até pelo fato de você poder criar métodos dentro do command, é natural que uma injeção de dependência de alguma service, que acople sua regra de negócio, seja necessária.

Abs e boa sorte com projeto.


0
Apesar de ser possível você fazer isso, acredito que você pode estar misturando um pouco as coisas. Os services não devem ser utilizados para validações.

As validações devem estar contidas no objeto de domínio. No seu caso você pode declarar a classe de domínio da seguinte forma:

class Usuario {
String nome
String login
String nome

static constraints {
login unique
}
}

Além disso você pode adicionar restrições personalizadas
O projeto url=https://github.com/leandrogehlen/BrValidation]BrValidation[/url] tem exemplos de como você pode registrar suas validações


0
Corrigindo o post acima

class Usuario {
String nome
String login
String nome

static constraints {
login unique: true
}
}


e o link =https://github.com/leandrogehlen/BrValidation]BrValidation



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto