Pregunta

Trabajo en el proyecto JBJF en SourceForge y queremos mejorar el acceso a la base de datos para este marco. Actualmente, es semiflexible, pero el acceso se realiza a nivel de Tarea.

Nos gustaría configurar una interfaz simple de algún tipo que sea de naturaleza genérica y pueda alojar el acceso a la base de datos a / desde JBJF. Por lo tanto, a las clases Framework no les importa qué tipo de base de datos, simplemente llaman a un método como getConnection () y regresa un objeto java.sql.Connection.

Me pregunto qué sería más adecuado, una capa DAO típica con una sola interfaz o una estructura de tipo Plugin donde configuramos el Servicio de base de datos en un archivo XML y el Framework carga los Plugins cuando se inicia.

tia,

adym

¿Fue útil?

Solución

Estaba empezando a pensar que Hibernate se había vuelto demasiado grande e hinchado, pero recientemente trabajé en un proyecto usando la última versión 3.5 y usando JPA y definitivamente lo han adelgazado y lo han hecho mucho mejor que algunos de las otras versiones 3.x. Recomiendo JPA usando Hibernate :-)

Una de las mejores cosas de este enfoque es lo bueno que es Hibernate para manejar múltiples dialectos de bases de datos diferentes. Nuestra aplicación se ejecuta en MySQL, H2 y SQLServer sin modificaciones (y probablemente también se ejecute también en las otras bases de datos principales).

Otros consejos

¿qué tal abstraer todo eso y usar JPA?

Es difícil de decir sin conocer los detalles, pero en general, no escribiría mi propio marco y en su lugar usaría Hibernate o una herramienta ORM similar. Ya ha definido XML para asignar objetos a tablas y viceversa, puede intercambiar fácilmente diferentes implementaciones de bases de datos y, en general, es una gran herramienta para hacer este tipo de cosas.

Las dos opciones que enumeras no son mutuamente excluyentes; puede tener una capa DAO / Repository a la que accede a través de alguna interfaz / API, mientras que las implementaciones concretas se inyectan en tiempo de ejecución para satisfacer sus dependencias.

Por ejemplo, escriba una interfaz WidgetRepository que defina la parte del widget de su API de acceso a datos. Luego puede proporcionar un FileSystemWidgetRepository , HibernateWidgetRepository , XmlWidgetRepository , JpaWidgetRepository , etc., que implementa su interfaz.

La regla general sería utilizar un nivel de abstracción tan alto como sea posible mientras se cumplen sus requisitos. En la lista de ejemplo que di, un repositorio basado en JPA sería el nivel más alto porque abstrae incluso el marco ORM.

Luego puede mantener una referencia de WidgetRepository en sus objetos que la utilizan. Código solo contra esta interfaz. A continuación, coloque un marco Dependency Injection como Spring , que inyectará una implementación concreta de WidgetRepository en tiempo de ejecución en función de alguna configuración XML o mecanismo de cableado automático.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top