Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Usar Value Object

Estas en el tema de Usar Value Object en el foro de PHP en Foros del Web. Hola chicos he creado un ambiente de pruebas. Tengo esta tabla: Código PHP: CREATE TABLE  IF  NOT EXISTS  ` prueba ` (   ` codigo `  int ( 10 ...
  #1 (permalink)  
Antiguo 18/06/2015, 16:29
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Usar Value Object

Hola chicos he creado un ambiente de pruebas.
Tengo esta tabla:
Código PHP:
CREATE TABLE IF NOT EXISTS `prueba` (
  `
codigoint(10unsigned NOT NULL,
  `
nombresvarchar(30) DEFAULT NULL,
  `
fechadate DEFAULT NULL,
  `
cantidadint(10unsigned DEFAULT NULL,
  `
cargodecimal(8,2) DEFAULT NULL,
  `
abonodecimal(8,2) DEFAULT NULL,
  `
fotovarchar(20) DEFAULT NULL,
  
PRIMARY KEY (`codigo`)
ENGINE=InnoDB DEFAULT CHARSET=utf8
Y tengo su correspodiente Value Object:
Código PHP:
class PruebaVO {
    public 
$codigoVO;
    public 
$nombresVO;
    public 
$fechaVO;
    public 
$cantidadVO;
    public 
$cargoVO;
    public 
$abonoVO;
    public 
$fotoVO;    
    
    public function 
__construct($cod$nom$fec$can$car$abo$fot){
       
$this->codigoVO $cod;
       
$this->nombresVO $nom;
       
$this->fechaVO $fec;
       
$this->cantidadVO $can;
       
$this->cargoVO $car;
       
$this->abonoVO $abo;
       
$this->fotoVO $fot;       
    }
    function 
__destruct(){
    }

Tengo entendido que por cada Tabla de la base de datos se tiene una clase VO y una DAO. Cierto?
En mi DAO tengo un método listar:
Código PHP:
function listar(){
       
$query "SELECT codigo, nombres, DATE_FORMAT(fecha,'%d/%m/%Y') as fechaLO, cantidad, cargo, abono, foto FROM prueba";
       ***{
POR AQUI VA LA CONEXION A LA B.D.}***
       
$lista = array();
       while(
$fila=$recordSet->FetchRow()) {
          
$lista[] = new PruebaVO($fila['codigo'], $fila['nombres'], $fila['fechaLO'], $fila['cantidad'], $fila['cargo'], $fila['abono'], $fila['foto']);
       }
       return 
$lista;
    } 
Y en mi plantilla utilizo Smarty para visualizar:
Código PHP:
{section name=i loop=$lista}
        <
tr>
            <
td>{$lista[i]->codigoVO}</td>
            <
td>{$lista[i]->nombresVO}</td>
            <
td>{$lista[i]->fechaVO}</td>            
            <
td>{$lista[i]->cantidadVO}</td>
            <
td>{$lista[i]->cargoVO}</td>
            <
td>{$lista[i]->abonoVO}</td>
            <
td>{$lista[i]->fotoVO}</td>
        </
tr>
{/
section
Y mi controlador que tiene lo siguiente:
Código PHP:
$dao = new PruebaDAO();
$lista $dao->listar();
$tpl = new Plantilla();
$tpl->assign("lista"$lista);
$tpl->display('prueba.tpl.php'); 
Todo funciona y estoy usando MVC con php/mysql/smarty
Mi pregunta es la siguiente:
Qué pasa si tengo un método que solo necesita visualizar de mi tabla los campos: codigo, cargo y abono?
Espero sugerencias y comentarios.
__________________
Todos somos iguales. NO! a la violencia de género.
  #2 (permalink)  
Antiguo 18/06/2015, 17:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Usar Value Object

Cita:
Qué pasa si tengo un método que solo necesita visualizar de mi tabla los campos: codigo, cargo y abono?
Pues supongo que tienes dos opciones:

a) Te aseguras de sólo hacer SELECT de los campos que realmente necesitas
b) O simplemente ignoras los campos que no usarás en la vistas

O no entiendo tu problema entonces.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/06/2015, 10:21
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Usar Value Object

Cita:
Iniciado por pateketrueke Ver Mensaje
Pues supongo que tienes dos opciones:

a) Te aseguras de sólo hacer SELECT de los campos que realmente necesitas
b) O simplemente ignoras los campos que no usarás en la vistas

O no entiendo tu problema entonces.
Si hago select de los campos que solo voy a necesitar. Al momento de instanciar a PruebaVO invoca a todos los campos. Cómo ignoro a los que no necesito?
__________________
Todos somos iguales. NO! a la violencia de género.
  #4 (permalink)  
Antiguo 19/06/2015, 13:21
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Usar Value Object

Simplemente no regreses un objeto, Solo un arreglo con los datos que requieres.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 23/06/2015, 10:01
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Usar Value Object

Cita:
Iniciado por hhs Ver Mensaje
Simplemente no regreses un objeto, Solo un arreglo con los datos que requieres.
Pero para eso ya no tendría que usar mi objeto VO?
Cómo lo haría?
__________________
Todos somos iguales. NO! a la violencia de género.
  #6 (permalink)  
Antiguo 24/06/2015, 09:57
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Usar Value Object

Puedes usarlo pero tendrías que pasar propiedades en null para los datos que no requieres asi que seria mejor si usas tu DAO sin el Data Object.
Por otro lado en tu ejemplo estas empleando el concepto de Value Object por el de Data Object o Data Transfer Object
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 09/07/2015, 18:27
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: Usar Value Object

Cita:
Iniciado por hhs Ver Mensaje
Puedes usarlo pero tendrías que pasar propiedades en null para los datos que no requieres asi que seria mejor si usas tu DAO sin el Data Object.
Por otro lado en tu ejemplo estas empleando el concepto de Value Object por el de Data Object o Data Transfer Object
Bueno, he cambiado mi VO por este:
Código PHP:
class PruebaVO {

    public 
$codVO;
    public 
$nomVO;
    public 
$fecVO;
    public 
$canVO;
    public 
$carVO;
    public 
$aboVO;
    public 
$fotVO;    
    
    public function 
__construct($codVO$nomVO$fecVO$canVO$carVO$aboVO$fotVO){
       
$this->codVO $codVO;
       
$this->nomVO $nomVO;
       
$this->fecVO $fecVO;
       
$this->canVO $canVO;
       
$this->carVO $carVO;
       
$this->aboVO $aboVO;
       
$this->fotVO $fotVO;
    }

    function 
__destruct(){
    } 
Y utilizo el objeto VO para separar la lógica con la data. Es como se usa el DAO con el VO (en mi caso).

Supongo que igual usaré todo el VO y al mostrar solo utilizaré los que necesito así los demás estén procesados y cargados en memoria.
__________________
Todos somos iguales. NO! a la violencia de género.
  #8 (permalink)  
Antiguo 13/07/2015, 13:43
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Usar Value Object

Cita:
Iniciado por bandolera Ver Mensaje
Bueno, he cambiado mi VO por este:
Código PHP:
class PruebaVO {

    public 
$codVO;
    public 
$nomVO;
    public 
$fecVO;
    public 
$canVO;
    public 
$carVO;
    public 
$aboVO;
    public 
$fotVO;    
    
    public function 
__construct($codVO$nomVO$fecVO$canVO$carVO$aboVO$fotVO){
       
$this->codVO $codVO;
       
$this->nomVO $nomVO;
       
$this->fecVO $fecVO;
       
$this->canVO $canVO;
       
$this->carVO $carVO;
       
$this->aboVO $aboVO;
       
$this->fotVO $fotVO;
    }

    function 
__destruct(){
    } 
Y utilizo el objeto VO para separar la lógica con la data. Es como se usa el DAO con el VO (en mi caso).

Supongo que igual usaré todo el VO y al mostrar solo utilizaré los que necesito así los demás estén procesados y cargados en memoria.
No se por que quieres tener una clase, mejor utiliza el stdClass y puedes pasar un objeto simple con los valores que requieres.
Código PHP:
Ver original
  1. $prueba = new stdClass;
  2. $prueb->cod = 'Codigo';
  3. $prueba->nom = 'Bla, bla';
  4. //mas propiedades si lo requieres.
si solo requieres regresar una parte del objeto, solo tienes que usar el método mysqli_result::fetch_object que ya te crea un objeto con los campos que solicites en el select
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #9 (permalink)  
Antiguo 21/07/2015, 17:06
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Pregunta Respuesta: Usar Value Object

Cita:
Iniciado por hhs Ver Mensaje
No se por que quieres tener una clase, mejor utiliza el stdClass y puedes pasar un objeto simple con los valores que requieres.
Código PHP:
Ver original
  1. $prueba = new stdClass;
  2. $prueb->cod = 'Codigo';
  3. $prueba->nom = 'Bla, bla';
  4. //mas propiedades si lo requieres.
si solo requieres regresar una parte del objeto, solo tienes que usar el método mysqli_result::fetch_object que ya te crea un objeto con los campos que solicites en el select
Y con eso ya no utilizo mi clase VO?
__________________
Todos somos iguales. NO! a la violencia de género.

Etiquetas: fecha, object, select, sql, tabla, usar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:17.