Onde (que layer) para colocar métodos de consulta de entidade, “persistem” métodos etc.?
Pergunta
Eu tenho um aplicativo SEAM com algumas entidades JPA / Hibernate. E agora eu me pergunto onde colocar a minha consulta, persistência métodos.
A escolha padrão parece colocá-los em uma camada de feijão sessão com injetados
@PersistenceContext(...) @Inject EntityManager entityManager;
Mas eu acho que eu preferiria ter os métodos nas próprias entidades. Quais são os prós / contras?
- Testablity?
- Bondade?
- Desempenho?
E alguém tem links para as melhores práticas para interagir com o EntityManager etc. a partir de métodos sobre as entidades em vez de beans de sessão?
Best, Anders
Solução
Eu não tenho nenhuma experiência com SEAM, mas a partir de minha experiência com projetos Java, eu achei mais fácil de manter feijão clara persistem métodos. O que costumo fazer:
- Have feijão para objetos de negócios (como "Usuário" e "Setting", por exemplo)
- Ter uma camada DAO que pode persistir e recuperar estes feijões (simples CRUD)
- Tenha uma camada de serviço que nows como lidar com os feijões, e talvez até mesmo como construir um agregado de feijão
Desta forma, tudo é muito separados, e é fácil de unittest. Desempenho geralmente não é um problema com esta configuração.
Outras dicas
Sim, isso é também o que eu fiz antes.
Em geral, eu acho, EJB é incrivelmente detalhado e boilerplate'y, mas SEAM realmente ajuda um pouco, de modo que é por isso que, no meu projeto atual, a camada extra de beans de sessão apenas para consulta e persistem me irrita. Eu tenho a sensação de que eu poderia fazer um aplicativo razoavelmente concisa se eu poderia matar essa camada ...