Separar sistema em camada persistência e camada negócio

Pessoa:

Gostaria de separar minha camada de negócio da persistência em dois projetos do Eclipse. Assim eu geraria o jar de cada um e passaria pra um terceiro projeto, que seria minha camada web. Vou usar Hibernate e gostaria de saber se vcs colocariam os mapeamentos de objetos no projeto da persistencia ou deixariam no projeto de negócio mesmo. Tá difícil de separar o Hibernate.

Obrigado

Olá André!

Eu colocaria os mapeamentos junto com o projeto de negócios. Mas estou imaginando que você poderia usar a sua camada de persistência para outros projetos, com modelos diferentes.

Abraço

Thiago

André , isso é comum de se fazer.
Eu gosto de separar quando o projeto é grande…

Bom, eu queria fazer de uma forma que a camada de persistência não precisasse ter acesso a camada de negócio, mas com o Hibernate fica difícil fazer isso.

Poderia explicar qual a real necessidade de fazer essa separação de jars ?

Independente de gerar Jar ou não, meu problema é a separação.

Independente de gerar Jar ou não, meu problema é a separação.[/quote]
Separação você faz por pacotes. Mas se ainda assim quiser separar 2 projetos divida-os da forma que você achar necessário e faça referência de um projeto para o outro na sua IDE para que se consiga achar as classes.

Independente de gerar Jar ou não, meu problema é a separação.[/quote]
Separação você faz por pacotes. Mas se ainda assim quiser separar 2 projetos divida-os da forma que você achar necessário e faça referência de um projeto para o outro na sua IDE para que se consiga achar as classes.[/quote]

Sim, exatamente isso.

Estou querendo não fazer com que a camada de persistência fosse dependente da negócio, somente o contrário. Acha isso possível com o Hibernate? Pensei em fazer uma interface em que a camada de negócio devesse implementar, onde deveriam ser configurados os mapeamentos dos beans.

Independente de gerar Jar ou não, meu problema é a separação.[/quote]
Separação você faz por pacotes. Mas se ainda assim quiser separar 2 projetos divida-os da forma que você achar necessário e faça referência de um projeto para o outro na sua IDE para que se consiga achar as classes.[/quote]

Sim, exatamente isso.

Estou querendo não fazer com que a camada de persistência fosse dependente da negócio, somente o contrário. Acha isso possível com o Hibernate? Pensei em fazer uma interface em que a camada de negócio devesse implementar, onde deveriam ser configurados os mapeamentos dos beans.[/quote]
Para essa abstração separe suas classes por pacotes e utilize Repositories para seu domínio e Data Mappers (Famoso DAO) para resolver a persistência.

http://martinfowler.com/eaaCatalog/repository.html
http://martinfowler.com/eaaCatalog/dataMapper.html

Quanto ao Hibernate entendo que o repositório que você criar vai chamar ele para localizar e armazenar teus objetos.

Independente de gerar Jar ou não, meu problema é a separação.[/quote]
Separação você faz por pacotes. Mas se ainda assim quiser separar 2 projetos divida-os da forma que você achar necessário e faça referência de um projeto para o outro na sua IDE para que se consiga achar as classes.[/quote]

Sim, exatamente isso.

Estou querendo não fazer com que a camada de persistência fosse dependente da negócio, somente o contrário. Acha isso possível com o Hibernate? [/quote]

Não.
Contudo, se o que vc quer é separar a camada de persistência da camada de negocios ,se ambas usam hiberante não tem problema. Ao usar as anotações do hibernate no projeto de negocio vc não está fazendo a camada de negocio depender da persistência mas sim do modelo (modelo é diferente de persistência).
Ora, isso não tem problema nenhum pois o modelo pertence na camada de negocio.

A dependência só acontece se vc usar algo do hibernate na camada de negocio além das anotações (que são considerados metadados)

Independente de gerar Jar ou não, meu problema é a separação.[/quote]
Separação você faz por pacotes. Mas se ainda assim quiser separar 2 projetos divida-os da forma que você achar necessário e faça referência de um projeto para o outro na sua IDE para que se consiga achar as classes.[/quote]

Sim, exatamente isso.

Estou querendo não fazer com que a camada de persistência fosse dependente da negócio, somente o contrário. Acha isso possível com o Hibernate? [/quote]

Não.
Contudo, se o que vc quer é separar a camada de persistência da camada de negocios ,se ambas usam hiberante não tem problema. Ao usar as anotações do hibernate no projeto de negocio vc não está fazendo a camada de negocio depender da persistência mas sim do modelo (modelo é diferente de persistência).
Ora, isso não tem problema nenhum pois o modelo pertence na camada de negocio.

A dependência só acontece se vc usar algo do hibernate na camada de negocio além das anotações (que são considerados metadados)

[/quote]

Acho que vou fazer um projeto web e outro com o resto.

Eu costumo fazer assim como vc disse. Crio um projeto .WAR para as páginas e as servlets, e um .JAR para as demais classes da aplicação.

E a separação entre a persistencia e as classes de negócios é feita por pacotes dentro do projeto .jar.

Gostaria de saber se outras pessoas do fórum tb trabalham dessa forma ???

ué com hibernate é justamente bem mais fácil de fazer isso, se você fizer um bom uso de generics com hibernate é bem tranqüilo fazer isso,
a camada de persistência inteira aqui fica num único jar as aplicações nem precisam conhecer como ela funciona a única coisa é que os arquivos de configuração do hibernate tem que ficar na sua camada de negocio

ué com hibernate é justamente bem mais fácil de fazer isso, se você fizer um bom uso de generics com hibernate é bem tranqüilo fazer isso,
a camada de persistência inteira aqui fica num único jar as aplicações nem precisam conhecer como ela funciona a única coisa é que os arquivos de configuração do hibernate tem que ficar na sua camada de negocio

[/quote]

Bom, a minha preocupação é com o mapeamento de objetos (hbm´s). Provavelmente os hbms ficarão na camada de negócio, além da configuração do Hibernate.

Se você precisa não deixar a camada de negócios depender da engine de persistência faça configuração via XML e não anotações. Anotações criam uma dependência entre seus objetos e o framework, normalmente esta dependência não se msotra intrusiva o suficiente para ser um problema mas se você realmente precisa separar as coisas não pode gerar este vínculo.

Dica: dificilmente você precisa disso.