Persistencia en PHP

A continuación un breve análisis de las posibilidades de acceso a base de datos desde PHP. Pero primero un concepto:

 

Diferencia entre Data Access Layer y Data Abstraction Layer:

  • Data Access Layer: es añadir una capa de acceso a datos a tu aplicación que simplifica el acceso a los datos. Simplificar significa que tendrás que escribir menos código para conseguir interactuar con la base de datos.
  • Data Abstraction Layer: es algo más complejo. Por un lado simplifica el acceso a los datos pero, además, evita que cambios en tu modelo de datos (por ejemplo, el nombre de una columna de una tabla) impliquen cambios en tu capa de lógica de negocio.

 

A la hora de elegir un mecanismo de acceso a datos lo primero que hay que decidir es si se quiere un sistema sencillo que simplemente me haga escribir menos código, o si quiero uno más complicado que, además, me permita cambiar mi modelo de datos sin cambiar nada más. En general suele depender del tamaño del proyecto. Sólo si me enfrento a un proyecto realmente grande, estaré interesado en sistemas de abstracción.

 

Una última cosa: existe una confusión con el término “abstracción“. En muchos de estos mecanismos se utiliza para indicar que el método de acceso para diferentes bases de datos (mysql, mssql, postgresql, etc.) es el mismo. En otros casos se utiliza para indicar que la lógica de acceso a datos se encuentra abstraída de la lógica de negocio. Yo utilizo el término en ésta segunda acepción.

 

Lista de algunos mecanismos de persistencia en PHP:

 

  • Data Access Layer: objeto que simplifica la realización de cualquier consulta SQL.
  • Query Abstraction: no sólo simplifica el acceso sino que permite abstraerse del SQL. Tu escribes en un seudo-SQL y el objeto se encarga de traducirlo al SQL propio de la base de datos.
  • Active Record: patrón de diseño con el que un objeto representa un registro de una tabla de la BD. Ya no hay un objeto para todo acceso, como en los casos anteriores. Hay un objeto para cada registro.
  • Data Abstraction Layer: el acceso a base de datos es más complejo. Existen múltiples clases que abstraen la conexión, base de datos, cada tabla, cada registro …
    • Creole Project
    • QCodo: se generan las clases de acceso a la BD en tiempo de compilación.
    • PHPDoctrine: las clases se generan en tiempo de ejcución.
    • Propel : tiene motor para tiempo de compilación y otro para tiempo de ejecución.

Me dejo en el tintero algún otro sistema más. Pero lo he quitado porque me parecía demasiado repetitivo. Yo creo que con estos ejemplos uno ya se puede hacer una idea de las posibilidades que tiene en PHP.

Buscador hispano de Zend Framework:.

6 Comentarios

  • 1. Raúl Vicente  |  Agosto 10th, 2007 at 9:42 am

    Epa Luis,

    sólo comentar que a lo que comentas de abstraer la lógica de negocio separándolo de la base de datos, en lo que se refiere a la primera acepción, se conoce como wrapper SQL, es decir, la lógica de Negocio es común y tenemos una capa que genera el SQL específico para cada BD.

    Un saludo

  • 2. noth  |  Agosto 21st, 2007 at 7:12 am

    Muy buen articulo, enhorabuena!!

  • 3. Persistencia en Java-Spri&hellip  |  Agosto 27th, 2007 at 11:56 am

    [...] con el artículo que Luis ha escrito sobre persistencia en PHP, yo me he decidido a realizar un post sobre [...]

  • 4. Persistencia en Java-Spri&hellip  |  Agosto 27th, 2007 at 12:29 pm

    [...] con el artículo que Luis ha escrito sobre persistencia en PHP, yo me he decidido a realizar un post sobre [...]

  • 5. Claudio  |  Agosto 29th, 2007 at 6:58 am

    Buen artículo.
    Por lo menos en mi experiencia, es fatal usar Active Records y cosas por el estilo cuando se tiene que trabajar con grandes lotes de información de una vez. No hay nada mejor que una query lo más limpia posible.

  • 6. Persistencia PHP  |  Octubre 22nd, 2008 at 6:00 am

    http://www.programania.net/php/ez-components/persistencia-en-php/

Comenta el articulo:

Requerido

Requerido,