Metodos dinamicos
31/08/2012 02:46
0
Galera uma duvida bem nivel iniciante. Quando tenhu um metodo dinamico, tipo:


def user = new Usuario(userId: 'teste', password: '123456).save()


Onde devo defini-lo?? na propria classe de Dominio ? no controlador ? devo criar um service ?

Me ajudem por favor.


=/
Tags: Metodos Dinamicos


0
Fala Toni,

Seguinte brother, quando vc cria o dominio por exemplo Usuario... ele já possui o método save, no caso vc ñ define. Então quando vc criar uma instância de Usuario ele já tem implicito o método save!

Vê se ñ ficou confusa a tentativa de explicação e se ñ entendi errado sua dúvida! :D


0
Oi Toni,

o negócio funciona da seguinte maneira: quando uma aplicação Grails é iniciada, a primeira coisa que ela faz é verificar todas as classes definidas no diretório grails-app/domain.

Para cada uma destas, vão ser inseridos os métodos de crud como save, delete, finders dinâmicos, etc. Então você não precisa se preocupar em implementar alguma interface ou extender alguma classe.

A linguagem Groovy é dinâmica, isto quer dizer que nós podemos alterar a estrutura de nossas classes em tempo de execução. Estas alterações são coisas como adicionar atributos e métodos, modificar algum existente e coisas do gênero.

Pra entender melhor como este negócio funciona, recomendo que você dê uma lida neste link: http://www.itexto.net/devkico/?p=535

Nele explico como isto funciona, espero que com isto se torne mais claro o funcionamento do framework pra você. Caso não fique, bom: to ai pra te ajudar! :)


0
desculpa galera, acho que me expressei mal. Não se prendam ao método save(), falo de qualquer método dinâmico, postei essa linha de codigo acima como exemplo. Por que possuo duas classes e estou tentando relacioná-las. Encontrei um exemplo que funciona definindo o método dinâmico acima, porem não sei onde vou coloca-lo, em um service, no controlador ou na própria classe de domínio ?

deu pra entender ?
31/08/2012 13:44


0
No bootstrap da sua aplicação (grails-app/conf/Bootstrap.groovy) você pode adicionar seus métodos dinâmicos.

No exemplo abaixo vou adicionar uma método dinâmico na classe String

 String.metaClass.'static'.ehNuloOuVazio = {String texto ->
texto == null || texto == ''
}

//depois que o código acima for executado significa que você adicionou um novo
//método na classe String
assert String.ehNuloOuVazio("nao sou nulo") == false
assert String.ehNuloOuVazio(null) == true

Para qualquer classe vc pode fazer isto e é isto que o grails faz para injetar os métodos save(), find(), list()... etc nas suas classes de domínio.

Seria isto?

[ ]'s
31/08/2012 23:51


0
vcarvalho ! então se eu precisasse criar um metodo dinamico "meuMetodo" bastaria eu fazer isso para toda e qualquer classe ?
01/09/2012 02:43


0
Seria mais ou menos isto sim.
Porém alterar o metaclass pode ser um pouco perigoso, pois vc pode alterar o comportamento de uma classe e isto acabar influenciando em outros pontos da sua aplicação.

Conforme o kiko respondeu logo acima de uma olhada neste artigo (http://www.itexto.net/devkico/?p=535), onde ele explica muito bem esta questão dinâmica do groovy.

[ ]'s
01/09/2012 04:38



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