Introducción.

Teniendo lista la capa de acceso a la base de datos se procede entonces a la creación del modelo de datos de la única estructura de persistencia que tiene el proyecto: la tabla Contacto. La utilidad de este modelo es la de abstraer del resto de la aplicación todo lo concerniente a su lógica especifica de negocio, es decir, especificar todo lo relacionado con su conducta, consulta y persistencia para que el resto de la aplicación se pueda desentender de ella y se modularice al estilo DRY

Creación de la clase contacto.

Para hacer esto se crea el archivo contacto.php en el directorio raíz del proyecto.

Los campos de la clase coinciden con los especificados en la tabla de la base de datos con igual nombre. La versión inicial de la clase se describe a continuación.

<?php
class Contacto
{
    private $id;
    private $nombres;
    private $apellidos;
    private $correo;
    private $fechaNacimiento;
    // Resto de la implementación.
}
?>

Se crean los métodos para modificar desde el exterior a los atributos de la instancia: métodos pon o setters.

    public function ponId($valor)
    {
        $this -> id = $valor;
    }
    public function ponNombres($valor)
    {
        $this -> nombres = $valor;
    }
    public function ponApellidos($valor)
    {
        $this -> apellidos = $valor;
    }
    public function ponCorreo($valor)
    {
        $this -> correo = $valor;
    }
    public function ponFechaDeNacimiento($valor)
    {
        $this -> fechaNacimiento = $valor;
    }

De igual manera se crean los métodos que permiten obtener el valor de los atributos de la instancia: métodos obt o getters.

    public function obtId()
    {
        return $this -> id;
    }
    public function obtNombres()
    {
        return $this -> nombres;
    }
    public function obtApellidos()
    {
        return $this -> apellidos;
    }
    public function obtCorreo()
    {
        return $this -> correo;
    }
    public function obtFechaDeNacimiento()
    {
        return $this -> fechaNacimiento;
    }

Estos métodos son el lugar idóneo para establecer restricciones en el dominio de los valores de los atributos como por ejemplo, evitar que al campo $correo se le asignen direcciones que no cumplan con el formato o que al campo $fechaNacimiento se le asignen fechas futuras entre otros. Por simplicidad de la aplicación de demostración este tipo de validaciones se omiten y se dejan libres para ser desarrolladas por el lector.

Implementación del acceso a la base de datos.

Como se mencionó inicialmente, el acceso a la base de datos no se realiza directamente utilizando las función de PDO provistas por PHP sino que por el contrario, se aprovecha la capa adicional de alto nivel implementada en el capítulo pasado.

Todas las operaciones descritas a continuación hacen referencia a como almacenar, editar, remover y recuperar Contactos (operaciones CRUD) a partir de la información de la instancia de la clase del mismo nombre.

Agregando contactos.

    public function agregar($bd)
    {
        $sql = "INSERT INTO contacto ('nombres', 'apellidos', 'correo', 'fnacimiento') " .
               "VALUES ('{$this -> nombres}', '{$this -> apellidos}', '{$this -> correo}', '{$this -> fechaNacimiento}')";
        return $bd -> ejecutar($sql);
    }

Editando contactos.

    public function editar($bd)
    {
        $sql = "UPDATE contacto SET nombres='{$this -> nombres}', " .
               "apellidos='{$this -> apellidos}', correo='{$this -> correo}', " .
               "fnacimiento='{$this -> fechaNacimiento}' WHERE id='{$this -> id}'";
        return $bd -> ejecutar($sql);
    }

Removiendo contactos.

    public function remover($bd)
    {
        $sql = "DELETE FROM contacto WHERE id='{$this -> id}'";
        return $bd -> ejecutar($sql);
    }

Recuperando contactos.

    public function recuperar($bd, $id)
    {
        $sql = "SELECT id, nombres, apellidos, correo, fnacimiento FROM contacto WHERE id='{$id}'";
        $res = $bd -> consultar($sql) -> fetch();
         if($res === false)
            return false;
        $this -> id              = $res['id'];
        $this -> nombres         = $res['nombres'];
        $this -> apellidos       = $res['apellidos'];
        $this -> correo          = $res['correo'];
        $this -> fechaNacimiento = $res['fnacimiento'];
        return true;
    }

Nótese como todos los métodos del modelo Contacto reciben por parámetro a la instancia de BaseDeDatos a la cual se va a acceder, esto quiere decir que es responsabilidad de la acción que los invoca el establecer la conexión y el validar que esta se haya realizado exitosamente.

También se puede observar que el método recuperar recibe un parámetro adicional al resto de los métodos el cual hace referencia al ID del Contacto que se desea recuperar, con él se realiza la consulta a la base de datos y en éxito se actualizan los campos de la instancia con la información obtenida. El resto de los métodos realizan su cometido: agregar, actualizar y borrar, a partir la información encontrada en sus atributos.

Listando contactos.

Un método adicional que requiere del acceso a la base de datos es el que permite obtener un listado de los contactos registrados filtrado de acuerdo a una serie de condiciones especificadas en ejecución. Este método será útil para implementar el listado de contactos con filtro de búsqueda (5 y 6).

	public static function listar($bd, $where=false)
	{
		$sql = "SELECT id, nombres, apellidos, correo, fnacimiento " .
	               "FROM contacto " .
		       (($where !== false) ? "WHERE " . $where . " " : "") .
		       "ORDER BY apellidos, nombres";
		return $bd -> consultar($sql);
	}

Métodos complementarios.

Un último método que se requiere como complemento para facilitar la manipulación del objeto utilizando JSON es el método toArray que convierte los atributos de la instancia a su correspondiente representación de arreglo, algo muy similar a lo realizado por la función get_object_vars.

    public function toArray()
    {
        return array('id'              => $this -> id,
                     'nombres'         => urldecode($this -> nombres),
                     'apellidos'       => urldecode($this -> apellidos),
                     'correo'          => urldecode($this -> correo),
                     'fechaNacimiento' => urldecode($this -> fechaNacimiento));
    }

Conclusiones.

Con la implementación del modelo que recubre a un mayor nivel las operaciones relacionadas con el acceso a la persistencia de los datos y la lógica del negocio se terminan los preparativos de infraestructura para la implementación de las acciones faltantes de la aplicación de ejemplo a través de accesos asíncronos.

Enlaces.

VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)

Artículos relacionados:

  1. Hacer algo cuando inicia o termina el evento AJAX con Prototype
  2. Ejemplo rápido y simple de AJAX con PHP y PrototypeJS
  3. Ejemplo de AJAX rápido y simple con PHP y jQuery