Racionamento de Dominios
27/05/2012 23:59
0
Pessoal,

gostaria de saber se existe algum meio de otimir o uso de dominios através da classe de dominio. Antigamente eu tinha 4 domínios ('A','B','TipoA','TipoB'). Agora tenho 3 dominios, 'A', 'B' e 'Tipo':

class A {

...

Tipo tipoA

static constraints = {

tipoA inList XXXXXXX

}



}

class B {

...

Tipo tipoB


static constraints = {

tipoB inList XXXXXXX

}


}

class Tipo {

...
String classe // nome da classe onde armazenará o respectivo tipo
String nome


static constraints = {

classe inList['A', 'B']
nome nullable: false, blank: false

}


}

O que eu estava fazendo era criar um dominio para armazenar os tipoA e tipoB porém eu queria saber se alguém conhece alguma maneira de unificar os tipos e através de um campo no dominio 'tipo' permitisse eu cadastrar ambos e filtrá-los através de alguma maneira. Alguém poderia me ajudar com este raciocinio?
Tags: dominio, redução,


0
Brother pelo que entendi vc já fez o que queria, na classe Tipo, vc tem uma lista das "classes" que possuem tipo.

c
lasse inList['A', 'B']


Sendo assim ao salvar um tipo, vc saberá quem ele pode pertencer, se é A ou B, depois fazendo um busca simples no banco vc pode pegar as classes que pertence á A e B.


0
Opa mals to meio durmindo e não reparei que classe era uma constraint que pode possuir um dos valores da lista! :D


0
Só uma idéia acho que classe deveria estar nos filhos de Tipo, aí sim.. vc teria a flag pra identificar a classe!


0
Grabriel,

minha intenção é usar apenas o 'tipo' para classificar ambas as classes. Daí no tipo eu colocava a que classe aquele determinado tipo seria usado. Quando eu invocasse a classe automaticamente iria aparecer apenas, respectivamente daquela classe apenas os tipos cadastrados.

'Tipo' já possui o flag 'classe' para poder filtrá-los. Eu não sei é como farei o list nas constraints de 'A' e 'B' para mostrar apenas os tipos cadastrados para a própria classe.

Tem alguma idéia?

28/05/2012 13:21


0
Então eu faria mais um dominio TipoClasse fazendo a associação de um Tipo á uma Classe! depois é só pesquisar em TipoClasse qual Classe está associado á algum Tipo.


0
Não entendi Gabriel, poderia exemplificar?
28/05/2012 16:55


1
Acho que o que o Gabriel quis dizer é que nas classes TipoA e TipoB não vai ter um relacionamento mapeado com a classe Tipo, e sim um método que vai fazer uma busca nas classes Tipo associada com a instancia. Ex:


class TipoA {
...
public def tipos() {
return Tipo.findAllByClasseAndClasseid( 'TipoA', id )
}
}

class TipoB {
...
public def tipos() {
return Tipo.findAllByClasseAndClasseid( 'TipoB', id )
}
}

28/05/2012 17:18


0
Rcauler,

muito obrigado por exemplificar... me ajudou demais...

Seguindo seu exemplo e declarando a função dentro do domínio, como ficaria minha constraint para que a mesma listasse os tipos disponíveis?

Seria incorreto fazer assim:

class A {
...
Tipo tipoA

static constraints = {
tipoA inList:[tipos()]
}

public def tipos() {
return Tipo.findAllByClasseAndClasseid( 'TipoA', id )
}

}

class B {
...
Tipo tipoB

static constraints = {
tipoB inList:[tipos()]
}

public def tipos() {
return Tipo.findAllByClasseAndClasseid( 'TipoB', id )
}

}
28/05/2012 18:19


1
Talvez seja melhor você usar um validator.


class A {
...
Tipo tipo
...
static constraints = {
tipo( validator : { val ->
return !A.tipos().contains( val )
} )
}
...
static def tipos() {
return Tipo.findAllByClasse( 'TipoA' )
}
}


http://grails.org/doc/latest/ref/Constraints/validator.html
28/05/2012 19:19


0
Rcauler,

muito obrigado pela dica. Valeu mesmo.


Vou testar e posto aqui o resultado.

29/05/2012 02:13


1
Gabriel,

valeu também pela ajuda.

Grande abraço
29/05/2012 02:14


0
Falou brother! as vezes ñ temos a melhor solução mas a gente tenta ajudar! :D Abração!


0
Rcauler e Grabriel,


testei, mas não consegui fazê-lo buscar o resultado esperado. Inclui "${a.tipos()}" direto na alimentação na GSP e infelizmente não retorna nenhum valor.

O que estou fazendo de errado?
29/05/2012 23:12



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