| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2011 14:45:35
|
brunohansen
JavaEvangelist
![[Avatar]](/images/avatar/1e0feeaff84a19bf3936e693311fa66d.jpg)
Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline
|
Há pouco tempo venho usando java e seus frameworks, por isso essa necessidade recorrente da ajuda de vocês.
Tenhu usado JPQL e me ocorreu que esta fere The Law of Demeter quando se escreve:
Já no o.ATRIBUTO1 JPQL fura o encapsulamento da classe, aumentando assim o acoplamento das consultas JPQL com a estrutura interna da classe, ou seja, se a estrutura interna da classe for alterada todas as consultas acopladas a esta também terão de ser alteradas! Que mer#%%$!
Existe alguma formar de desacoplar as consultas da estrutura interna da classe?
Tem que funcionar no mínimo em casos como este:
A consulta seria: Consultar todos os Consumidores que residam em um determinado CEP.
Como seria esta consulta de forma desacoplada?
[]s
Conto com a ajuda de vocês!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/07/2011 15:07:29
|
gomesrod
GUJ Ranger
![[Avatar]](/images/avatar/5de6755473dc988fe6c7db81f26a53ac.jpg)
Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline
|
Uma questão muito bem levantada...
Bom, não sou um grande especialista mas vou dar um pitaco. O negócio é que frameworks ORM têm algumas características um pouco incômodas quando se pensa por um ponto de vista mais teórico. Por exemplo, o Model ser "invadido" por anotações do framework, e esse fato que vc acabou de citar.
Creio que isso aconteça porque o ORM consegue isolar um pouco o "mundo dos objetos" do "mundo relacional", mas não isola totalmente. No fundo eles sempre serão relacionais, e sempre o "Cliente terá Endereço que terá CEP". E aí não faz sentido pensar em acoplamento e lei de Demeter porque esses conceitos se aplicam mais a objetos mesmo.
Esse é o motivo do "acoplamento", é um espelho do relacionamento no BD. Agora se a ferramenta permite contornar o problema eu não sei, não tenho tanta experiência com frameworks ORM.
This message was edited 1 time. Last update was at 15/07/2011 06:27:42
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/07/2011 19:38:42
|
brunohansen
JavaEvangelist
![[Avatar]](/images/avatar/1e0feeaff84a19bf3936e693311fa66d.jpg)
Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline
|
Ninguém mais para opinar?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2011 06:32:07
|
gomesrod
GUJ Ranger
![[Avatar]](/images/avatar/5de6755473dc988fe6c7db81f26a53ac.jpg)
Membro desde: 11/05/2007 19:46:22
Mensagens: 901
Offline
|
Também queria ver algumas opiniões mais embasadas.
brunohansen, me desculpe, contaminei seu tópico com a Maldição do Forever Alone... é que toda vez que eu respondo uma thread ela morre rsrs
This message was edited 1 time. Last update was at 15/07/2011 06:32:25
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2011 07:33:19
|
maior_abandonado
JWizard
![[Avatar]](/images/avatar/0d7c463832b871c20405a6c9296b5517.jpg)
Membro desde: 03/09/2007 11:30:08
Mensagens: 2694
Localização: sp
Offline
|
seria interessante se alguém conhecer uma forma de desacoplar isso... mas aparentemente acho que não tem muito jeito, a parte mais alta conhece as mais baixas, nesse exemplo o Consumidor conhece Endereço que por sua vez conhece cep, mesmo que cep não conheça endereço que por sua vez não conheça consumidor... da mesma forma que um view conhece o controller e o controller conheça o modelo (mesmo com coisas como injeção de dependencia por exemplo, um controller pode até não ter criado/instanciado um modelo mas ainda precisa saber o que invocar dentro do modelo em questão)... mesmo que o modelo não conheça o controller e possa ser portado para outro controller...
bom, eu posso estar sendo meio leigo, mas nunca vi uma solução onde as camadas mais altas não precisem conhecer as mais baixas...
|
espero ter ajudado...
falando nisso, caso seu problema tenha sido resolvido, edite o seu primeiro post e coloque um [RESOLVIDO] no titulo do tópico.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/07/2011 07:53:24
|
bacofrb
Thread.start()
Membro desde: 12/04/2008 12:14:39
Mensagens: 40
Offline
|
creio que é mais comum ver a aplicação da LOD nas classes que ligam as camadas da app.
ex: controller -> service -> repository -> entityManager ...
se for fazer isso nas classes de entidade, na minha opinião, pode deixar o sistema com uma complexidade desnecessária...
att.,
This message was edited 1 time. Last update was at 15/07/2011 08:00:57
|
|
|
 |
|
|