Crear Capa de Datos en PHP

Durante el desarrollo de nuestras webs dinámicas utilizando PHP, tenemos que escribir el código que nos permita acceder y trabajar con la información de la BD, donde PHP nos ofrece una serie de funciones para realizar estas tareas.

18-Sep-2016

Necesidad de utilizar capas de datos

Presentación

Durante el desarrollo de nuestras webs dinámicas utilizando PHP, tenemos que escribir el código que nos permita acceder y trabajar con la información de la BD, donde PHP nos ofrece una serie de funciones para realizar estas tareas.

Si para cada operación con la base de datos vamos escribiendo todas las funciones necesarias (conectarnos, consultar o procesar y desconectar) mezcladas con nuestro código, al final estaremos generando más líneas de código de las necesarias, que ante un cambio del diseño o estructura de la BD (renombrar tablas, campos, vistas, eliminar o añadir nuevos campos, etc.) provocará que la tarea de mantenimiento de nuestra web sea muy engorrosa y propensa a fallos.

Una manera de evitar mantenimientos innecesarios de código, consiste en implementar una 'capa de datos' que nos permita separar todo el proceso de acceso y trabajo con la BD del resto de nuestro código.

Para conseguir esta separación de procesos, creamos clases que realizan estas tareas y que posteriormente las utilizaremos en nuestro código.

A lo largo de una serie de módulos os mostraré una posible implementación de esta capa de datos por medio de la utilización de una clase principal y subclases.

La siguiente ilustración muestra un esquema de cómo quedaría la capa de datos en el diseño de nuestro aplicativo.

Capa de Datos en PHP

La clase principal CnnMySQL

Es la clase principal de nuestra capa de acceso a datos y la única que se comunicará realmente con la BD  y se encargará de:

  • Realizar la conexión/desconexión de la BD y del resto de los procesos de comunicación.
  • Liberar los recursos una vez han sido utilizados.
  • Ofrecer métodos para ejecutar los comandos DML (select, insert, update y delete) necesarios.
  • Ofrecer indicadores de estado del último comando ejecutado y total de registros afectados.
  • Realizar una traza o seguimiento de los procesos que se están ejecutando sobre la BD.

Subclases de acceso

Cada tabla y sus vistas estarán representadas por una subclase. Las subclases heredarán la clase principal lo que les permitirá la comunicación con la BD.

  • Cada subclase ofrece una serie de métodos estándar para trabajar con la información:
    • Obtener listados
    • Obtener el valor de un campo
    • Contar registros
    • Añadir, eliminar y actualizar registros
  • Adicionalmente incluirán métodos de trabajo particulares para la tabla y vistas que representa.

Acceso a la Capa de Datos

El acceso a la capa de datos desde nuestro código se realizará instanciando la subclase para crear el objeto, ejecutando los métodos de trabajo y finalmente destruyendo el objeto una vez que ya no lo necesitemos.
Esta técnica de desarrollo nos permite:

  • Crear una separación entre código y proceso de datos
  • Utilizar menos líneas de código a la hora de acceder y trabajar con la BD
  • Reducir considerablemente las modificaciones de nuestro código cada vez que se realice un cambio en la BD ya que estos cambios los  realizaremos en la capa de datos sin afectar al resto del aplicativo

Consideraciones

  • Todos los archivos de definición de clases que se vayan creando, se guardarán en la misma carpeta. Podemos guardarlos en una carpeta de nombre ‘clases’ que cuelgue directamente de la raíz del sitio web.
Carpeta donde almacenar las clases
  • Para cada clase se creará un archivo de nombre class.nombre_clase_minúsculas.php. De esta manera la clase principal sería: class.cnnmysql.php.
  • Cada archivo de subclase tendrá el nombre de la tabla a la que representa siguiendo la sintaxis: class.nombre_tabla_minúsculas.php. Si tenemos una tabla de usuarios en la base de datos llamada ‘usuarios’ la subclase tendría el nombre class.usuarios.php.
  • Dentro de cada archivo se definirá la clase utilizando el mismo nombre del archivo pero con mayúscula inicial; es decir, si el archivo de la clase principal se llama class.cnnmysql.php el nombre de la clase será ‘CnnMysql’ y si el archivo de la subclase se llama class.usuarios.php el nombre de la clase será ‘Usuarios’.
  • Se implementará un proceso de autocarga de los archivos de clases, para no tener que ir incluyendo una referencia al archivo de la clase en los scripts donde los utilicemos.
  • Los datos de conexión a la base de datos: host, bd, usr y clave se almacenarán en un archivo de configuración por separado de las clases, para conseguir una mayor reutilización de las clases.