Dúvida de Design de código
23/06/2016 11:46
0
Galera, tava dando uma estudada em solid e me surgiu uma dúvida com relação a modelagem de objetos no Grails. 
Vamos supor que eu tenha uma classe de domínio chamada usuário.

Se eu quisesse utilizar dentro dela uma interface.

Algo assim:

interface TipoPagamento{ public double calculaPagamento() ; }
class ProfessorContratado implements TipoPagamento{ calculaPagamento(){}}
class ProfessorTemporario implements TipoPagamento{ calculaPagamento(){}}

class Professor{
?TipoPagamento tipoPagamento;

}


Esse código vai dar zebra pq as interfaces e classe não estão sob as classes de domain class.

Alguem tem alguma coisa a falar sobre isso? Ou como trabalha com esse tipo de coisa? 

Obrigado!


 



?
Tags: Grails, Design de Código


0
Você pode ter atributos de classes que não são domains, mas você teria que marca-los como transientes para serem ignorados pelo mecanismo de persistencia. Ou se estiver usando hibernate, implementar um user type para isso.

Sem conhecer o seu cenario, uma outra possibilidade que me parece mais interessante seria tornar TipoPagamento um enum com as constantes CONTRATADO e TEMPORARIO, e um método calculaPagamento() na classe Professor.

Pense comigo, para o método calculaPagamento() funcionar provavelmente vai precisar de informações sobre o professor, ou me engano?
Neste caso, a chamada acabaria sendo algo como:
professor.tipoPagamento.calculaPagamento(professor)

Melhor seria:
professor.calculaPagamento()

Se o calculo for complexo você pode até jogar para outras classes como no código que vc postou, mas ainda assim mantendo encapsulado em Professor


0
Oi Leonardo,

não há problema algum em ter classes de domínio implementando interfaces. 



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