martes, 9 de abril de 2013

Introducción al acceso a las bases de datos en JAVA. Patrones y buenas prácticas.

La mayoría de los proyectos actuales necesitan guardar o consultar datos de una base de datos relacional, de esta manera se puede persistir la información de sus usuarios y del negocio que implementan pudiendo acceder a ella en cualquier momento.

Para conectarse a las BD las aplicaciones utilizan por lo general drivers, que no son más que componente que permiten realizar una conexión amigable con la base de datos de un tipo específico. Algunos de estos tipos pueden ser MSSQL, MySQL, Oracle, PostgreSQL, etc.

Otro elemento importante a tener en cuenta es que para realizar operaciones sobre los datos se necesita de un lenguaje de consultas que permita a los desarrolladores trabajar con las bases de datos, y en este punto contamos con SQL.

Aquellos desarrolladores con poca formación o que desconozcan los patrones de diseño existentes puede ser que comentan el error de mezclar el código de la aplicación que desarrolla con el código del acceso a los datos y esto puede traer muchos problemas a corto, mediano y largo plazo. Es por esta razón que se han propuesto arquitecturas y patrones de diseño que especifican cual debe ser la forma de diseñar una aplicación y como una aplicación debe acceder a sus datos. Esto se muestra en las siguientes dos imágenes a manera de ejemplo.

Fig.1 Elementos que componen una arquitectura Modelo Vista Controlador o MVC.

En esta propuesta de arquitectura los elementos que son modelos tienen la responsabilidad de gestionar el acceso a los datos, por lo que el resto de los componentes que son vistas o controladores no tienen que preocuparse de este asunto.


Fig.2 elementos que componen una arquitectura en 3 Capas.

En este caso  la capa inferior se encarga de contener los componentes de acceso  a los datos y sistemas externos por lo que las capas superiores se abstraen de estas responsabilidades.

Como pueden ver en las imágenes  en cada propuesta se establece una separación lógica entre el código de la aplicación y el código del acceso a datos. Esto  hace posible que:
  1. Se pueda cambiar el tipo de base de datos. Ejemplo pasar de MySQL a PosgreSQL con poco cambio sin afectar el código de la aplicación.
  2. Se pueda realizar modificaciones en la estructura o diseño base de datos llevando al mínimo los cambios en la aplicación.
Otro elemento a considerar es cómo se puede combinar la programación Orientada a Objetos donde todo son clases, objetos y componentes con el acceso a datos donde todo son consultas estructuradas, tablas y tuplas de datos. En la búsqueda de una solución a este asunto se llegó a un patrón de diseño conocido como “Mapeo Objeto Relacional” u ORM por sus siglas en inglés que establece una relación entre las tablas de una base de datos y las clases entidades de una aplicación. Para simplificar este patrón diremos que la solución que propone es tener una clase entidad por cada tabla de la base de datos a la que queramos acceder. Esta clase y la tabla se consideran isomorfos o sea, tienen la misma estructura, por cada columna de la tabla se tendrá un atributo en la clase. Además La clase contendrá todo el código encargado de manejar las consultas SQL de forma que el resto de la aplicación no tenga que tratar con consultas SQL cuando se quiera manejar los datos, este código estará dentro de los métodos de la clase que se mapearán contra las operaciones que se deseen realizar sobre la base de datos.
JAVA como lenguaje primero hizo uso de JDBC para el acceso a las BD. Con esta tecnología se puede:
  1. Establecer una conexión con la BD, especificando un driver y los parámetros para autenticarse en la BD.
  2. Usar la conexión establecida para realizar operaciones sobre la BD (seleccionar datos, insertar, modificar, eliminar, etc).
  3. Procesar los resultados devueltos por las operaciones anteriores.
Esta tecnología tiene sus limitaciones y ha sido sustituida en proyectos de desarrollo de aplicaciones empresariales que usan JAVA por una implementación del patrón ORM que se ha constituido el framework por defecto cuando se va a desarrollar una aplicación JAVA con acceso a bases de datos relacionales. Estoy hablando de Hibernate. Si a eso le sumamos el uso del estándar JPA con anotaciones ya se completa la solución para el acceso a bases de datos relacionales.

Fig. 3 Ejemplos de frameworks ORM que usan JDBC.

Este es solo una entrada introductoria a otras que tratarán temas como:
  • Uso de Maven para la gestión de dependencias en proyectos JAVA.
  • Acceso a bases de datos relacionales con JDBC, Hibernate, JPA, a través de servicios RESTful, etc.
  • Uso del Spring Framework, y todos sus componentes, en el desarrollo de aplicaciones JAVA.
  • Uso de ZKoss y Vaadin para el desarrollo de la capa de presentación en aplicaciones empresariales.

¿Te ha gustado este Post? Compártelo con tus amigos.

2 comentarios:

IconIconIcon