Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Forma óptima de trabajar con objetos y Model View Controller

Estas en el tema de Forma óptima de trabajar con objetos y Model View Controller en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola gente tengo una duda de alguien que recién comienza a trabajar con PHP orientado a objetos. Supongamos que tenemos una red social (que imaginación ...
  #1 (permalink)  
Antiguo 02/11/2010, 15:00
Avatar de Samie  
Fecha de Ingreso: mayo-2009
Mensajes: 27
Antigüedad: 14 años, 11 meses
Puntos: 2
Información Forma óptima de trabajar con objetos y Model View Controller

Hola gente tengo una duda de alguien que recién comienza a trabajar con PHP orientado a objetos.
Supongamos que tenemos una red social (que imaginación la mía :P) en la que tenemos usuarios y estos pueden tener fotos.
Deberíamos tener sus dos clases respectivas con sus propiedades y métodos.

Ahora imaginemos que el usuario hace login, está dentro.
Tendríamos unos 3 "archivos .php": index.php (intrerfaz gráfica), obtener_usuario.php(controlador) y usuario.php (modelo).

Como queremos seguir lo mejor posible el patrón Modelo Vista Controlador, lo que ocurrirá internamente será algo como:

1- El usuario se conecta a una interfaz gráfica que una de las cosas que hará será saludar al usuario con su nombre y mostrarle sus datos de perfil

2- Los datos del usuario se obtendrán mediante una llamada a un método del controlador, algo así como
Código PHP:
obtener_usuario(); 
3- Este a su vez se encarga de pedirle al modelo los datos mediante las siguientes llamadas:
Código PHP:
obtener_datos_inicio(); 
(que devolvería el nombre, apellido1 y la localización) ,
Código PHP:
obtener_numero_fotos(); 
(que devolvería el número de fotos que ha subido) y con los datos que obtiene crea un objeto de tipo "Usuario"

4- El modelo a su vez en cada una de estas llamadas accede a la base de datos, crea una variable de sesión con el id del usuario y devuelve un array asociativo al controlador(por ejemplo) con los datos a mostrar en la interfaz .

Este es un ejemplo sencillo pero ¿estaría bien el proceso a seguir que he escrito?

¿Que objetivo práctico tendría crear un objeto de tipo usuario (más que el de encapsular todos sus atributos en una misma "cosa") ?
Al fin y al cabo el objeto que creas en ese proceso en el modelo sólo va a perdurar en ese proceso (la persistencia entre distintas páginas la obtenemos con las variables de sesión).

Y por último, según he leido yo, el echo de hacer esto así es para desacoplar la dependencia entre diferentes partes del software, ¿quiere decir esto que si en lugar de que el controlador hiciese la llamada al modelo fuese la propia interfaz sería más dificil de mantener?

La verdad es que aún a pesar de que creo haber entendido los conceptos básicos la estructura general de las operaciones aún no las comprendo bien.

Cualquier sugerencia o mejora será bien recibida
Muchas gracias por vuestra paciencia si habeis llegado a leer hasta aquí.
  #2 (permalink)  
Antiguo 02/11/2010, 22:29
Avatar de andres_aquino  
Fecha de Ingreso: septiembre-2010
Ubicación: $("#place").html("FDW");
Mensajes: 138
Antigüedad: 13 años, 7 meses
Puntos: 24
Información Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Hola Samie, veo que también tienes las mismas dudas que yo. Si no entedí mal, lo que tú quieres hacer es poder tener todo esto bien estructurado, cosa que me sucedió también a mí al principio; si es así, te paso unos enlaces muy buenos e interesantes para que puedas aplicar muy bien los conceptos del MVC bajo PHP:

1. Introducción a MVC con PHP - primera parte: http://www.jourmoly.com.ar/introducc...primera-parte/
2. Introducción a MVC con PHP - segunda parte: http://www.jourmoly.com.ar/introducc...segunda-parte/

Te digo que personalmente estos enlaces me sirvieron mucho para poder emplearlo en un sitio en producción bastante grande al que sin problemas pude manejarlo, cosa que era muy engorroso antes debido toda la cantidad de archivos repartidos. En estos enlaces vas a poder encontrar (como ya te he dicho) conceptos, documentación, recomendación y sobre todo, código fuente bien explicado para que puedas ir adentrándote más en este mundillo.

Desde que utilizo MVC, todo me va de mil maravillas (tal vez suene a publicidad barata, pero es cierto )

Bueno Samie, espero te sirva la buena documentación que te he proporcionado.

Saludos!
__________________
Te sirvió mi ayuda? +1 ;D
Andy Aquino - @aquiandres
  #3 (permalink)  
Antiguo 03/11/2010, 07:04
Avatar de Samie  
Fecha de Ingreso: mayo-2009
Mensajes: 27
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Muchas gracias por los enlaces andres_aquino, voy a leerlos y ponerlos en práctica y te comento por aquí mis resultados.

Me alegra saber que no soy el único al que le ha pasado esto :)

De momento no me quiero meter con ningún framework ya que creo que se deben conocer los fundamentos y ponerlos en práctica primero.

Salu2!

EDITO: tiene una pinta increible el tutorial, con ejemplos y esas cosas. Cuando pueda leerlo con calma me lo estudio porque vale la pena
  #4 (permalink)  
Antiguo 03/11/2010, 13:02
Avatar de andres_aquino  
Fecha de Ingreso: septiembre-2010
Ubicación: $("#place").html("FDW");
Mensajes: 138
Antigüedad: 13 años, 7 meses
Puntos: 24
Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Me alegra que te sirva el tutorial que te he pasado, que como bien lo dices, es increible y gracias a este pude hacer un sitio usando el patrón de diseño MVC.

Cualquier experiencias que tengas, cuenta lo que has logrado.

Saludos!
__________________
Te sirvió mi ayuda? +1 ;D
Andy Aquino - @aquiandres
  #5 (permalink)  
Antiguo 05/11/2010, 10:17
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: Forma óptima de trabajar con objetos y Model View Controller

yo en base a ese tutorial he creado mi propio framework, y lo he modificado para que por default se tenga un banckend y un frontend, entre otras cosas, altamente recomendables los tutoriales de esa pagina.
  #6 (permalink)  
Antiguo 05/11/2010, 15:47
Avatar de andres_aquino  
Fecha de Ingreso: septiembre-2010
Ubicación: $("#place").html("FDW");
Mensajes: 138
Antigüedad: 13 años, 7 meses
Puntos: 24
De acuerdo Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Igual a mi.. es muy recomendable el tutorial, o como decis vos, es altamente recomendable para todos los que quieran comenzar en este tema! Y sí, es bueno como guía para realizar tu propio framework e ir agregándole funcionalidades conforme uno lo necesite.
__________________
Te sirvió mi ayuda? +1 ;D
Andy Aquino - @aquiandres
  #7 (permalink)  
Antiguo 09/11/2010, 08:12
Avatar de Samie  
Fecha de Ingreso: mayo-2009
Mensajes: 27
Antigüedad: 14 años, 11 meses
Puntos: 2
Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Vale creo que ya lo he entendido. Aplicando el concepto a mi ejemplo ( y omitiendo alguna cosa como lo del patrón singleton) yo hice algo como esto:

index.php
Código PHP:
<?php
require 'FrontController.php';
FrontController::main();

?>
frontController.php
Código PHP:
<?php
class FrontController
{
    static function 
main()
    {
        

        if(! empty(
$_GET['controlador']))
              
$controllerName $_GET['controlador'] . 'Controller';
        else
              
$controllerName "UsuarioController";
        
        
//Lo mismo sucede con las acciones, si no hay accion, tomamos index como accion
        
if(! empty($_GET['accion']))
              
$actionName $_GET['accion'];
        else
              
$actionName "index";
        
        
$controllerPath =  $controllerName '.php'//mejorable, archivo de configuracion
            
        //Incluimos el fichero que contiene nuestra clase controladora solicitada    
        
if(is_file($controllerPath))
              require 
$controllerPath;
        else
              die(
'El controlador no existe - 404 not found');
        
        
//Si no existe la clase que buscamos y su accion, tiramos un error 404
        
if (is_callable(array($controllerName$actionName)) == false
        {
            
trigger_error ($controllerName '->' $actionName '` no existe'E_USER_NOTICE);
            return 
false;
        }
        
//Si todo esta bien, creamos una instancia del controlador y llamamos a la accion
        
$controller = new $controllerName();
        
$controller->$actionName();
    }
}


?>
UsuarioController.php
Código PHP:
<?php
class UsuarioController
{
    
    public function 
mostrarDatos()
    {
        include 
'UsuarioModel.php';
        
$model=new UsuarioModel();
        
$datos=$model->getDatos();
        
        include 
'usuarioView.php';
    }
   
}
?>
UsuarioModel.php:

Código PHP:
<?php
class UsuarioModel{

    public function 
__construct(){
    }

    public function 
getDatos(){
            
        
//Consultas a la BD
        // ............
        // ............
        
        
$arrayDatos[]='Pepe';
        
$arrayDatos[]='29';
        
$arrayDatos[]='España';
        return 
$arrayDatos;
    
    }

}

?>
UsuarioView.php:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>MVC - Modelo, Vista, Controlador </title>
<style type="text/css">
.Estilo1 {color: #E8D2FF}
</style>
    
</head>
<body style="background-color:#0145A8;color:#D5E0F0;">
<h1>Datos principales:</h1>
<?php
    $nombre
=$datos[0];
    
$edad=$datos[1];
    
$loc=$datos[2];
    echo 
"Nombre: $nombre";
    echo 
"<br />";
    echo 
"Edad: $edad";
    echo 
"<br />";
    echo 
"Localizacion: $loc";
?>
</body>
</html>
He simplificado algunas cosas con respecto al tutorial, me he saltado lo que ponía de view->show('vistaUsuario.php') y en lugar de hacer eso hago directamente include 'vistaUsuario.php'; porque me parecía más intuitivo esto último, hay algún inconveniente que deba tener en cuenta al hacer esto??

Por lo que entiendo de patrones y prácticas aconsejables en la orientación a objetos se supone que cada objeto debe realizar sus funciones, en este caso usuario se encargaría de sus accesos a la base de datos.

Más o menos esta es la idea no?
Algo importante que se me haya quedado fuera?

Muchas gracias!
  #8 (permalink)  
Antiguo 13/01/2011, 19:56
 
Fecha de Ingreso: enero-2011
Ubicación: Veracruz
Mensajes: 2
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Hey amigo, intente probar tu codigo, pero no veo resultado alguno, alguna recomendacion?
  #9 (permalink)  
Antiguo 13/01/2011, 22:16
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Cita:
Iniciado por sergiogzdz Ver Mensaje
Hey amigo, intente probar tu codigo, pero no veo resultado alguno, alguna recomendacion?
mmmm. ¿que estudies? o que en su defecto si fueras tan amable y si no es mucha molestia pongas cual es el error por favor.

Por cierto yo recomiendo esta página http://phpro.org/tutorials/Model-Vie...oller-MVC.html Segun lo que lei, esta mejor explicado y aplicado los conceptos. No es dificil de entender al margen de que hay buenas notas en el blog.
__________________
Drupal Argentina
  #10 (permalink)  
Antiguo 14/01/2011, 02:53
 
Fecha de Ingreso: enero-2011
Ubicación: Veracruz
Mensajes: 2
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Cita:
Iniciado por NUCKLEAR Ver Mensaje
mmmm. ¿que estudies? o que en su defecto si fueras tan amable y si no es mucha molestia pongas cual es el error por favor.

Por cierto yo recomiendo esta página [url]http://phpro.org/tutorials/Model-View-Controller-MVC.html[/url] Segun lo que lei, esta mejor explicado y aplicado los conceptos. No es dificil de entender al margen de que hay buenas notas en el blog.

Ciertamente, debo de estudiar y mucho jeje. Tratando de entender el codigo

En FrontController.php

Código PHP:
if(! empty($_GET['accion']))
              
$actionName $_GET['accion'];
        else
              
$actionName "index"

Mil disculpas, obviamente había que asignarle "mostrarDatos" a "$actionName" para que imprimiera el arreglo :P

para algún otro despistado como yo:

index.php?accion=mostrarDatos

y sobre el blog que recomiendas, ya me lo habia topado y tiene muy buenos tutoriales. Intente probar ese ejemplo, tristemente no lo pude echar a andar y por el poco tiempo que tenia en ese entonces, no trate de entenderlo y hasta ahí la deje, pero ya va siendo tiempo de ponerme a estudiar :)

Gracias!! es mi primer pregunta en este gran foro, tratare de no preguntar sin antes leer y/o analizar ;)

Última edición por sergiogzdz; 14/01/2011 a las 03:44
  #11 (permalink)  
Antiguo 14/01/2011, 19:14
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 4 meses
Puntos: 43
Respuesta: Forma óptima de trabajar con objetos y Model View Controller

Hola Samie !

Cita:
Por lo que entiendo de patrones y prácticas aconsejables en la orientación a objetos se supone que cada objeto debe realizar sus funciones
Exacto, esto tiene que ver con el nivel de cohesión de los objetos, entre mayor sea es mejor, también puedes ver el principio de Single Responsability Principle .


Cita:
He simplificado algunas cosas con respecto al tutorial, me he saltado lo que ponía de view->show('vistaUsuario.php') y en lugar de hacer eso hago directamente include 'vistaUsuario.php'; porque me parecía más intuitivo esto último, hay algún inconveniente que deba tener en cuenta al hacer esto??
Delegaría la responsabilidad a otra clase, por ejemplo que se llame Template, podrías implementar comportamientos específicos que te darán mayores ventajas.

Por ahí encontré una simple implementación de MVC que me pareció perfecta para los que inician en su estudio, te dejo el archivo adjunto.

Espero que te sea de utilidad.

Un saludote !
Archivos Adjuntos
Tipo de Archivo: zip mvc.zip (6,2 KB (Kilobytes), 10 visitas)
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.

Etiquetas: mvc, php, poo
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 21:47.