Hibernate - padronização de utilização

Da-lhe,

Galera, vou desenvolver um projeto do zero, utilizando hibernate e struts.

Ja tive a oportunidade de trabalhar com o hibernate antes, e consegui abstrair bastante a principal idéia deste framework.

Minha dúvida agora é: “Como utilizar este framework da forma correta, ou de uma forma padronizada ?”.

Inicialmente, nosso padrão de organização e desenvolvimento seguia a seguinte arquitetura:

  • Value Objects
  • Business Objects
  • DAO
  • HibernateDAO
  • Controllers (Servlets)

Essa organização reduiziu para:

  • Model (ORM)
  • Controllers

Atualmente, seguindo a estrutura acima, caso eu tenha que inserir um objeto no banco de dados, eu chamo o método save estático da classe

“HibernateHelper”, e este método se encarrega de inserir o registro no banco.

Porém, não acho isso uma “solução elegante” para o meu problema.

Li sobre IOC, DI … mas, ou eu não entendi nada, ou não é possivel utilizar esses patterns para solucionar meu problema, pois ao utilizar esses patterns, meus objetos assumiram responsabilidades e caracteristicas que não deveriam assumir.

Um exemplo prático ajudaria muito

abraços

Uma solução elegante se resume em vc dividir isso em camadas, de maneira que o acoplamento entre elas seja mínimo.
Com isso, vc pode utilizar tb o Spring pra fazer a ID, fazendo a “cola” entre o seu modelo e o seu controller…

Minha sugestão:

  • Um RequestProcessor extendido para autenticação, autorização e auditoria
  • Uma action central para possiveis controles de pre-processamento e pós-processamento
  • uma factory para os objetos de negocio e para repositórios (retornando os DAOs implementados, via ID, se possivel)
  • Um BusinessObject bem feito, evitando um BO por entidade…
  • Uma interface representando o repositório da entidade
  • Uma implementação deste repositorio (neste caso, um DAO) extendendo um DAO Generico bem tipado (generics)
  • Entidades anotadas e com um agregate bem pensado…

Na teoria, me pareceu ser bem interessante, mas um pouco complexo demais.

Tu tem algum exemplo pratico ?

Bem que poderia ser colocado um exemplo desta arquitetura acima, como exemplo.