Dúvida quanto a acoplamento

Salve amigos !!

Estou com a seguinte dúvida, uma aplicação separada em camadas deve apresentar pouco ou quase nenhum acoplamento, certo ?

Bom, se eu possuo uma camada de persistência que utilize JDBC, por exemplo, com um método [quote]Cliente buscarCliente(int id) [/quote]

Bom, supondo que eu tenha implementado na camada de negócios um Domain Model e que minhas camadas sejam lógicas (não utilizo TO), a questão é: minha camada de persistência precisa do objeto Cliente para instanciar e retornar para a camada de negócios, logo eu tenho um bom acoplamento da persistência para a camada de negócios !! :roll:

isso é normal ? :???:

Abs. a todos

Olá,

uma camada deve estar acoplada somente à camada imediatamente inferior a ela. Portanto, se, como vc diz, seus objetos de domínio usam uma camada de acesso ao BD (chamada comumente de DAO), esse acoplamento é válido, e pelo mesmo motivo sua camada de negócio passa a ser considerada desacoplada do BD.

Procure a Mundo Java edição 17. Lá tem uma matéria que fala sobre como implementar Padrões de Negócio que reduzem este acoplamento.

Ok Senhores, obrigado pela atenção !

PCalcado, vi seu artigo na revista e ficou realmente muito bom, parabéns !

Entendi que podemos chegar ao desacoplamento através do uso de interfaces :slight_smile:

Minha única dúvida era realmente na camada de persistência, de cara achei estranho ter algo como:

package app.persistencia;

import app.negocio.Cliente;

public class DaoCliente {

    .....

}

nesse caso a camada de persistência faz uma referência direta a camada de negócios, vou dar mais uma pesquisada e volto para postar o que entendi !

Obrigado a todos pela atenção !

Oi,

Este tipo de acoplamento entre Camadas geralmente é considerado aceitável por limitações tecnológicas. As instruções para comunicação entre Camadas (Mundo Java #15 :wink: ) acabam não podendo ser implementadas sempre.

Na verdade, estas duas Camadas são especiais. A de Negócios nunca deveria depender de outra e a de Persist~encia existe apenas para provêr serviços à Camada de Negócios. Talvez a analogia de Camadas não estja mais comportando a realidade…

Uma boa maneira de evitar este acoplamento em específico, se você realmente o quiser, é através de DAOs genéricos. Tem alguns exemplo no forum do GUJ, creio, usando Hibernate.

Se vc considerar que os DAOs e os Objetos de Negócios estão na mesma camada (Model, por exemplo), a codificação continua respeitando a divisão de camadas e não parece tão estranho.

Model não é Camada, Model é a interface entre a Camada de Apresentação, onde fica o MVC, e a p´roxima, de Negócios ou APlicação geralmente. DAOs devem ficar na Camada de Persistência, objetos de negócio na Camada de Negócio.

Material meu sobre o tema (com bibliografia):

http://fragmental.com.br/wiki/index.php?title=Arquitetura_de_Camadas_em_Java_EE
http://fragmental.com.br/wiki/index.php?title=RioJUG:_Arquitetura_de_Camadas_em_Java_Enterprise_Edition

Poderia chamar Model, Batatinha ou XPTO, quem define a camada é o freguês…

No meu projeto, por exemplo, é Services…que nada mais é do que (veja só q incrível!!!) a implementação do modelo (em inglês, Model) do sistema. :wink:

Não vamos discutir o sexo dos anjos, ok!? :lol:

Não é sexo dos anjos. Model é um conceito de MVC e muita gente confunde MVC com Camadas. Para resumir você não rpecisa de Camadas para ter MVC nem de MVC para ter Camadas, são coisas distintas que podem ser aplicadas em conjunto.

Voltando ao ponto, se você mistura DAO (Persistência) com Objtos de Negócio (Negócios) em uma Camada só está agrupando nela dois objetos com responsabilidades de tipos muito distintos, fugindo ao que o padrão se propõe que é agrupar componentes por responsabilidade comum.

E vc prefere subverter seu “padrão” criando uma dependência cíclica para resolver o problema proposto pelo colega!?

Faz assim… coloque sua estrutura de pacotes aí…

Vamos discutir sem filosofias, em cima de algo concreto…

Dependência cíclica? “Meu padrão”? Pelo visto você não se deu ao trabalho nem de ler a documentação que passei.

Suas dúvidas são respondidas no material citado, inclusive dei ênfaseao fato de haver bibliografia para você não achar que o padrão arquitetural é meu. Claro que você pode continuar simplesmente ignorando a literatura, embora eu acredite que evitaria questionamentos como este último.

Bem, já discutimos algumas vezes neste fórum e eu na época cansei de tentar argumentar contra a arrogância de quem nem se dá ao trabalho de ler o indicado antes de responder. Nos últimos meses achei que você tivesse mudado, mas não mudou, então vou voltar a não responder para não me aborrecer com briguinha boba. Você ganhou a batalha de egos antes mesmo dela começar, parabéns.

Para os realmente interessados em ensinar, aprender e debater, o material como citado contêm resumo de diversos conceitos espalhados em várias fontes, além de algum material original. Qualquer dúvida existem informações de contato nele, não estou mais observando esta thread porque não tenho tempo a perder com bobeiras.

Vc lê bastante e é autodidata… parabéns!!! Eu tb!!!

Vamos colocar em prática tanto conhecimento teórico… :wink:

Não precisa ficar nervoso… desculpe-me qq coisa… :roll:

Amigos, obrigado pelos esclarecimentos, já consegui tirar minhas conclusões, mais uma vez obrigado pela ajuda !

se algum moderador quiser trancar o post, sem problemas !

Abs, a todos