1

PHP Patterns – VO & DAO

Posted by touzas on sep 17, 2009 in Programación

PHP Patterns – VO & DAO

Como encuentro poca información por internet acerca del patrón de diseño que utilizo yo, voy a relatar la forma de usarlo y por qué lo uso.
Comenzé a utilizar patrones de diseño hace ya unos añitos, cuando alguien me hablo de ellos, o leí en alguna parte que existian, me llamo la atención y quise saber más.

Encontré el patrón VO DAO.

Que significa esto:
1.- VO => Value Objects.
2.- DAO => Data Access Objects.

Creo que todo esto se verá muchísimo mejor con un ejemplo. Vamos con ello.
Imaginemos que tenemos la siguiente estructura en una tabla de nuestra base de datos:


CREATE TABLE `pruebas`.`probando` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nombre` VARCHAR( 250 ) NOT NULL ,
`Observaciones` VARCHAR( 250 ) NOT NULL ,
`borrado` TINYINT( 1 ) NOT NULL DEFAULT ‘0'
)) ENGINE = InnoDB

Yo tengo el costumbre (no sé si bueno o malo) de tener mi propia clase para la capa de datos.

————————————— Capa de Datos —————————



class dbClass {
public $conexion;
private $server = “localhost”;
private $user = “user”;
private $password = “pass”;
private $database = “pruebas”;

public function getServer(){
return $this->server;
}
public function getUser(){
return $this->user;
}
public function getPassword(){
return $this->password;
}
public function getDB(){
return $this->database;
}
function conecta() {
$this->conexion = mysql_connect ( $this->server, $this->user, $this->password ) or die ( “No se puede establecer la conexión: ” . mysql_error () );
if ($this->conexion != null) {
mysql_select_db ( $this->database );
}
}
function desconecta() {
mysql_close ( $this->conexion );
}
function selectFromSQL($sql) {
$this->conecta ();
$resultado = mysql_query ( $sql, $this->conexion ) or die ( “Error: ” . mysql_error () . ” <br/> ” . $sql );
$this->desconecta ();
return $resultado;
}
function countReg($sql) {
$this->conecta ();
$query = mysql_query ( $sql, $this->conexion ) or die ( “Error: ” . mysql_error () . ” <br/> ” . $sql );
$data = mysql_fetch_array ( $query );
$resultado = $data [0];
$this->desconecta ();
return $resultado;
}
function setReturn($sql) {
$this->conecta ();
$result = mysql_query ( $sql, $this->conexion ) or die ( “Error: ” . mysql_error () . ” <br/> ” . $sql );
$lastId = 0;
if (! $result) {
echo mysql_error ();
die ();
}else{
$sql = “SELECT @@IDENTITY as lastId”;
$ridentity = mysql_query($sql, $this->conexion) or die(”Identity Error: “. mysql_error(). “<br/>”);
if ($ridentity){
$row = mysql_fetch_row ( $ridentity );
$lastId = $row [0];
}
}
return $lastId;
}
function set($sql) {
$this->conecta ();
$result = mysql_query ( $sql, $this->conexion ) or die ( “Error: ” . mysql_error () . ” <br/> ” . $sql );
if (! $result) {
return mysql_error ();
echo mysql_error ();
die ();
}
return true;
}
}
?>

————————-

Una vez tenemos Base de Datos y Clase para trabajar con ella vamos con lo que nos ocupa, los objetos para poder trabajar:


<?php
class probandoVO{
var $Id;
var $Nombre;
var $Observaciones;
var $Borrado;
public function probandoVO($Id = “”, $Nombre= “”, $Observaciones = “”, $Borrado = “0?) {
$this->Id = $Id;
$this->Nombre = $Nombre;
$this->Observaciones = $Observaciones;
$this->Borrado = $Borrado;</span>

<span style="font-size: 8pt; font-family: 'Verdana'; color: #0000ff;">}
}
class probandoDAO {
var $tableName = “probando”;
public function getItem($id) {
$sql = “select * from ” . $tablename . ” where id=” . $id . ” and borrado = 0?;
$data = new dbClass ( );
$result = $data->selectFromSQL ( $sql );
while ( $row = mysql_fetch_array ( $result ) ) {
$item = new probandoVO ( $row ["Id"], $row ["Nombre"], $row ["Observaciones"], $row ["Borrado"] );
return $item;
}
return null;
}
public function get() {
$sql = “select Id, Nombre, Observaciones, Borrado from ” . $tablename . ” where borrado = 0?;
$data = new dbClass ( );
$result = $data->selectFromSQL ( $sql );
$datos = array ();
while ( $row = mysql_fetch_array ( $result ) ) {
$item = new probandoVO ( $row ["Id"], $row ["Nombre"], $row ["Observaciones"], $row ["Borrado"] );
$datos [] = $item;
}
return $datos;
}
public function insert($vo) {
$sql = sprintf ( “insert into ” . $tablename . ” (Nombre, Observaciones, Borrado) values (’%s’, ‘%s’, ‘%s’, ‘%s’)”,
addslashes ( $vo->Nombre ), addslashes ( $vo->Observaciones ), addslashes ( $vo->Borrado ) );
$data = new dbClass ( );
$result = $data->setReturn($sql);
return $result;
}
public function update($vo) {
$sql = sprintf ( “update ” . $tablename . ” set Nombre=’%s’, Observaciones=’%s’, Borrado=’%s’ where id=’%s’”,
addslashes ( $vo->Nombre ), addslashes ( $vo->Observaciones ), addslashes ( $vo->Borrado ), $vo->Id );
$data = new dbClass ( );
$result = $data->set ( $sql );
return $result;
}
}
?>

————————–

Una vez tenemos nuestros objectos creados solo tenemos que trabajar con ellos.

Para pintar:


$dao = new probandoDAO();
$arr = $dato->get();
foreach($arr as $data){
echo “Id: ” . $data->Id;
echo “Nombre: ” . $data->Nombre;
echo “Observaciones: ” . $data->Observaciones;
}

Para guardar, se supone que con un formulario y tal…:


$vo = new probandoVO();
$vo->Id = $_POST["Id"];
$vo->Nombre = $_POST["Nombre"];
$vo->Observaciones = $_POST["Observaciones"];
$dao = new probandoDAO();
if ($vo->Id > 0){
$dao->insert($vo);
}else{
$dao->update($vo);
}

Espero que os sirva de ayuda. Para mí fue un mundo nuevo, sobre todo pensando que lo más dificil de una aplicación es el mantenimiento, y generando todo el código de esta forma es muy sencillo realizar cualquier cambio.

Etiquetas: , ,

Copyright © 2010 Javier Lema. All Rights Reserved.
Theme by Lorelei Web Design.