Skip to content
Home » Trabajando con entidades: una introducci?n a DB_Dataobject

Trabajando con entidades: una introducci?n a DB_Dataobject

Las entidades son simplemente el contenido básico de los objetos de tu aplicación, la estructura de datos con la que estas trabajando. Si ya conoces las entidades, ve hasta la sección DB_Dataobjects.

¿Qué son las Entidades?

Si estas haciendo una apliación web sencilla, entonces estás tendrá que ver alguna de las siguientes entidades:

  • article
  • comment
  • user
  • ¿Qué hay sobre la fecha del artículo, o el nombre de usuario? Estos son atributos. Notar que las entidades siempre están denominadas en singular. Para más detalles sobre la diferencia entre entidades y atributos ver este artículo. Otro concepto que va de la mano con las entidades son las colecciones, que como habrás adivinado son listas de colecciones o entidades. Ejemplos de colecciones: todos los artículo de tu página principal, todos los comentarios asociados con un artículo, todos los resultados de una búsqueda concreta.

    Cuando se está diseñando cualquier aplicación (app), probablemente tengas una relación de cosas para hacer, pero las posibilidades hacia las que tiendes son:

  • decidir sobre qué entidades tu app se basará
  • asegúrate de que los atributos y entidades están diferenciadas de forma adecuada para crear tablas en la base de datos
  • construye la lógica ue gestiona los datos
  • El diseño orientado a objetos (OO) hace que aplicaciones complejas sean más fácil de manejar aportando los siguientes soncepts:

  • encapsulación de datos cada objeto ‘maneja’ todos los atributos para una entidad; si tus objetos son complejos, digamos algo objeto Coche, los datos son más manejables así tendrás las propiedades distribuidas en todo el sitio. No olvides que tu objeto puede estar compuesto por otros objetos (composición), como en el ejemplo del Coche, el atributo motor puede ser un objeto Motor. Todas las operacones asociadas con el objeto Coche podrían ser métodos en la clase Coche.
  • persistencia de datos
  • – tu aplicación podría resultar un tanto inútil si no eres capaz de preservar las modificaciones de tus objetos. Si quieres que los datos se mantengan de una página a otra, indicadoen el caso del objeto Usuario, necesitas guerdarlos en sesión. Para hacer que persista el objeto entre ‘logons’ en la aplicación, como la información de Usuario, necesitarás almacenarla en un contenedor persistente adecuado: como pueda ser un registro en la base de datos (DB), un fichero en el disco, una entrada en un directorio LDAP, etc.

  • estado del objeto
  • – cada vez que utilizas un método para modificar los atributos de un objeto, estás cmabiando su estado. En términos puros de OO todos los atributos de un objeto son privados y nunca pueden ser accedidos directamente desde otros objetos, sólo mediante métodos ‘get/set’. Sin embargo, en PHP4.x no está orientado en este sentido y por supuesto, con frecuencia, resulta más conveniente modificar las propiedades directamente.

    DB_Dataobject
    DB_Dataobject es un paquete de PEAR que gestiona la entidad por ti. En palabras del autor Alan Knowles:

    DataObject, lleva a cabo 2 tareas:
    1. construye sentencias SQL basadas en las variables de objetos y el constructor de métodos.
    2. actúa como el almacén de datos para una fila de una tabla.
    La clase núcleo es designada para ser extendida para cada una de tus tablas de esta forma colocas la lógica de los datos dentro de clases de datos.
    included, es un Generador para hacer tus ficheros de configuración y tus clases base.

    En un punto o en otro tu aplicación web requerirá que gestiones las entidades de una forma concreta, generalmente modificando el estado del objeto a través de una de las siguientes operaciones básicas:

  • añadir (INSERT)
  • modificar (UPDATE)
  • eliminar (DELETE)
  • el término que aparece entre paréntesis es el comando SQL equivalente. Lo que hace DataObjects (DO) es encapsular la forma en que interaccionas con los datos, haciéndolo mucho más sencillo la gestión el estado del objeto. El paquete presenta el siguiente ‘workflow’:

  • para empezar, instalas el paquete en tu jerarquía PEAR
  • utilizando entidades que previamente has elejido, creas las tablas adecuadas en la base de datos (BD)
  • ejecuta el script de DO createTables.php que creará las clases de la entidad en PHP que son análogas a las tablas en tu BD
  • utiliza la API DO para gestionar todos tus objetos (entidades) de una manera uniforme, con independencia de cuantos atributos añades/modificas/eliminas:
  • $myObj = new DataObjects_User // instantiate a User object
  • $myObj->get(12); // get a specific User object (row in the db)
  • $myObj->username = ‘your username here’; // getting/setting an attribute
  • $myObj->update(); // updating the object state in the db
  • $myObj->insert(); // insert if it’s a new object
  • $myObj->delete(); // delete the object
  • Las Ventajas
    Actualmente, DO hace mucho más, pero ahora ya tienes el concepto básico. Para más detalles consulta la documentación sobre DO aquí. Para ilustrar la utilidad de este sistema de trabajo, permíteme explicar un caso típico antes/después de Dataobjects:

    Antes de DO:

  • mi app tendrá 5 objetos principales, cada objeto tendrá cerca de 10 propiedades.
  • crearé las clases de la entidad, lista todas las variables de clase, crear todos los métodos añadir/modificar/borrar
  • el jueves, el cliente me podría decir que modificara 9 de los 10 atributos de un objeto que pidió el lunes, y añadir otros 5; esto significa que yo debería:
  • modificar la tabla en la BD
  • modificar las variables de la clase para el objeto
  • modificar todos los métodos get/set para cada atributo
  • modificar todos los métodos añadir/modificar/borrar para reflejar los cambios
  • Después de DO:

  • Es miércoles y el cliente está impaciente, pregunta por los atributos que había que cambiar en las dos entidades anteriores, y además quiere 2 nuevas entidades, una con cerca de 50 atributos
  • le dices, “no te preocupes”, porque ahora estas utilizando Dataobjects, de esta forma modificas las tablas de tu BD, lo que se puede hacer de una forma algo más rápida con PHpMyAdmin, y generar tus clases con el script DO
  • tiempo total empleado: literalmente el 10% de lo que hubiera sido sin Dataobjects
  • Resumen
    DB_Dataobject te permite gestionar entidades complejas en tus aplicaciones web gracias al encapsulamiento del los datos del objeto y permitiendote modificar el estado del objeto de una manera más sencilla.