Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

SDCA-La creación de los modelos

En nuestro desarrollo, vamos a crear Modelos, que son las clases que representan a nuestras tablas en la memoria. Cada tabla tendra su nodelo, con los datos con los que trabajamos

Cuando estas desarrollando un sistema que accede a una base de datos, tal ycomo comentábamos en el anterior articulo, uno de los patrones de que dispones, es el DAO.

En ese patrón, los modelos son representaciones exactas de las tablas que únicamente contienen datos, y no aportan mas métodos que los estrictamente necesarios para cargar y descargar esos datos.

Para mi, es un patrón que me gusta, aunque… pienso que seria interesante que incorporase algún método mas, y que normalmente voy a necesitar en todos los modelos

El establecer un modelo base, y hacer que todos los modelos extiendan de él, me aporta algunas ventajas muy interesantes

Primero, que puedo poner nombres controlados a los métodos comunes, para que puedan ser llamados siempre igual, naturalmente, que en el base. deberán ser abstractos, y los deberemos rellenar en cualquier modelo, pero…justamente por eso los necesito

Lo segundo, es que como todos los modelos extienden de este, podre hacer comprobaciones acerca de la clase que son, y, en la version Java, incluso, podré esperarlos como parámetros…

La creación de la clase será necesariamente abstract, y conservara el nombre de la tabla a la que va a representar, que podremos cargar en el constructor,  y en su setter, y podremos consultar con su getter

El objeto sería este

[php]

<?php
namespace App\modelos;

use App\service\RutinasXml;

abstract Class ModeloBase
{
private string $modelo;

public function __construct(string $modelo){
$this->setModelo($modelo);
}

/**
* @return string
*/
public function getModelo():string
{
return $this->modelo;
}

/**
* @param mixed $modelo
*/
public function setModelo(string $modelo):void
{
$this->modelo = $modelo;
}

public abstract function getId():int;
public abstract function setId(int $id_valor):void;
public static abstract function getNombreId():string;
public static abstract function getNombreTabla():string;

public function getXml(): string
{
$miXML=RutinasXml::arrayToXML($this->getArray(), $this->getModelo());
return $miXML;
}
}[/php]

Si revisamos el codigo…

  • de la 10 a la 12, tenemos el constructor, en el que esperamos recibir el nombre del modelo, y  lo guardamos
  • entre la 14 y la 28 tenemos el get y set del modelo…
  • en la 30, tenemos una función que cuando la implementemos, deberá retornar la PRIMARY_KEY del registro
  • en la 31, tenemos una función que cuando la implementemos, recibirá un valor y lo guardara en la PRIMARY_KEY del registro
  • en la 32 tenemos una función que cuando la implementemos, deberá retornar el nombre de la columna que tiene la PRIMARY_KEY
  • en la 33 devolverá el nombre de la tabla en la base de datos (normalmente sera igual al nombre del modelo (linea 8)
  • por ultimo, de la 35 a la 39, tenemos una rutina que es capaz de devolver este objeto como XML…por si lo necesitamos para algo

Ahora podemos ver como utilizamos nuestro ModeloBase, para implementar el modelo de una tabla, por ejemplo Cp_comunidades

Esta es la estructura

[php]
<?php
declare (strict_types = 1);
namespace App\modelos;

/*******************************************************************************
* Class Name: Cp_comunidades
* File Name: Cp_comunidades.php
* Generated: Friday, Nov 15, 2019 – 9:43:17 UTC
* – for Table: cp_comunidades
* – in Database: contabilidadautonomo
* Created by: table2class
********************************************************************************/

// Files required by class:
require_once («ModeloBase.php»);

// Begin Class «Cp_comunidades»
class Cp_comunidades extends ModeloBase{

// ************ Declaración de variables
private $cpcoa_id;
private $cpcoa_nombre;
private $cpcoa_pais;

const NOMBRE_TABLA_CP_COMUNIDADES = «cp_comunidades»;
const NOMBRE_PK_CP_COMUNIDADES = «cpcoa_id»;

// Class Constructor
public function __construct (int $cpcoa_id = null,string $cpcoa_nombre = null,int $cpcoa_pais = null) {
parent::__construct («Cp_comunidades»);
if (func_num_args () > 0) {
$this->setCpcoa_id ($cpcoa_id);
$this->setCpcoa_nombre ($cpcoa_nombre);
$this->setCpcoa_pais ($cpcoa_pais);
}
}

// Class Destructor
public function __destruct () {

}

// GET Functions
public function getid ():int {
return (int) $this->cpcoa_id;
}

public function getCpcoa_id ():int {
return (int) $this->cpcoa_id;
}

public function getCpcoa_nombre ():string {
return (string) $this->cpcoa_nombre;
}

public function getCpcoa_pais ():int {
return (int) $this->cpcoa_pais;
}

// SET Functions
public function setid (int $cpcoa_id):void {
$this->cpcoa_id =$cpcoa_id;
}

public function setCpcoa_id (int $cpcoa_id):void {
$this->cpcoa_id = $cpcoa_id;
}

public function setCpcoa_nombre (string $cpcoa_nombre):void {
$this->cpcoa_nombre = $cpcoa_nombre;
}

public function setCpcoa_pais (int $cpcoa_pais):void {
$this->cpcoa_pais = $cpcoa_pais;
}

// Salida en array
public function getInArray (): Array {
$array =[
«cpcoa_id»=> $this->cpcoa_id,
«cpcoa_nombre»=> $this->cpcoa_nombre,
«cpcoa_pais»=> $this->cpcoa_pais
];
return $array;
}

// Construye desde array
public static function setFromArray (array $datos) : Cp_comunidades {
$resp = new self ();
$resp->setCpcoa_id ((int) $datos[‘cpcoa_id’]);
$resp->setCpcoa_nombre ($datos[‘cpcoa_nombre’]);
$resp->setCpcoa_pais ((int) $datos[‘cpcoa_pais’]);
return $resp;
}

public static function getNombreId ():string {
return self::NOMBRE_PK_CP_COMUNIDADES;
}

public static function getNombreTabla ():string {
return self::NOMBRE_TABLA_CP_COMUNIDADES;
}

// para realizar desplegables

public function getSelect (){
return array (
0 => «cpcoa_id»,
1 => «cpcoa_nombre»
);
}
}
// End Class «Cp_comunidades»

[/php]

Revisemos el código

  • El constructor, acepta recibir todos los campos, pero también acepta dejarlo todo vacío. Observar que llama al constructor del padre, pasandole el nombre de clase, (no el de tabla) que lo identifica
  • en la 46 y en la 63 están el set y el get de la Primary_key, que obliga ModeloBase
  • en la 79, dejo un método, que quizás sea interesante dejar forzado en el modelo, junto con el de la línea 89, ya que facilitan un set y un get desde y hacia un array
  • por ultimo, en la línea 108, hay una función que devuelve un array totalmente pensado para cuando tenemos que preparar selects…. aunque, quizas en una API no lo necesitemos, la herramienta que me genera el modelo, me lo prepara….

Como imagináis, este trabajo lo tendremos que realizar con todas las tabla, aunque, como pienso dejar todo el código en GitHub… cuando lo termine, ahora con que hagáis un par de tablas, para ir probando, ya vale.

En la siguiente entrega, nos preocuparemos de los DAO….

 

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 3.83.187.36
Proxy: 3.83.187.36
Remote host: ec2-3-83-187-36.compute-1.amazonaws.com
Remote port: 40238
** 3.83.187.36, 172.70.174.169