Pergunta

Eu trabalho no Projeto JBJF no SourceForge e queremos melhorar o acesso ao banco para este quadro. Atualmente, é semi-flexível, mas o acesso é feito no nível da tarefa.

Nós gostaríamos de configurar uma simples interface de algum tipo que é de natureza genérica e pode hospedar o acesso ao banco de / para JBJF. Assim, as classes Framework não importa que tipo de banco de dados, eles simplesmente chamar um método como getConnection () e um objeto java.sql.Connection volta.

Eu estou querendo saber o que seria mais adequado, uma camada DAO típico com uma única interface ou um tipo de estrutura Plugin em que configurar o serviço de banco de dados em um arquivo XML e as cargas Framework o Plugin (s) quando se inicia.

tia,

adym

Foi útil?

Solução

Eu estava começando a pensar que Hibernate tinha ficado muito grande e inchado, mas eu tenho trabalhado recentemente em um projeto usando a última versão 3.5 e usando JPA e eles definitivamente emagreceu-lo para baixo e fez muito melhor do que alguns dos as outras versões 3.x. Eu recomendo JPA usando Hibernate: -)

Uma das grandes coisas sobre esta abordagem é o quão bom Hibernate está em lidar com vários dialetos banco de dados diferentes. Nossos corridas de aplicativos no MySQL, H2, e SQLServer sem modificações (e provavelmente seria apenas rodar em outros bancos de dados grandes também).

Outras dicas

como sobre toda abstrato que distância e uso JPA

É difícil dizer sem saber os detalhes, mas, em geral, eu não iria escrever o meu próprio quadro e passar a usar Hibernate ou uma ferramenta ORM similar. Ele já definiu XML para objetos de mapeamento para tabelas e costas, pode alternar com facilidade in / out diferentes implementações de banco de dados, e, geralmente, é uma grande ferramenta para fazer este tipo de coisa.

As duas opções que você lista não são mutuamente exclusivas; você pode ter uma camada DAO / Repositório que você acessa através de alguma interface / API, enquanto as implementações concretas são injetados em tempo de execução para satisfazer suas dependências.

Por exemplo, escrever um WidgetRepository de interface que define a parte Widget do seu acesso a dados API. Você pode, então, fornecer um FileSystemWidgetRepository , HibernateWidgetRepository , XmlWidgetRepository , JpaWidgetRepository , etc., que implementa a interface.

A regra geral seria usar como alto nível de abstração, como você pode enquanto ainda cumprir suas exigências. Na lista de exemplo que dei, um repositório baseado em JPA seria o nível mais alto, porque ele abstrai mesmo quadro ORM.

Você pode então manter um WidgetRepository de referência em seus objetos que fazem uso dele. Código só contra esta interface. Em seguida, colocar em prática um Dependency Injection quadro como Spring , que vai injetar um concreto WidgetRepository implementação em tempo de execução com base em algum mecanismo de configuração XML ou auto-ligação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top