JPQL, encapsulamento, acoplamento e Law of Demeter  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
brunohansen
JavaEvangelist
[Avatar]

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!
gomesrod
GUJ Ranger
[Avatar]

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

brunohansen
JavaEvangelist
[Avatar]

Membro desde: 27/03/2006 11:11:34
Mensagens: 391
Offline

Ninguém mais para opinar?
gomesrod
GUJ Ranger
[Avatar]

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

maior_abandonado
JWizard
[Avatar]

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.
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

[WWW]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team