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

Consulta acerca del patron MVC

Estas en el tema de Consulta acerca del patron MVC en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola compañors, estoy tratando de finalizar de armar mi framework para poder usarlo en mis aplicaciones para el trabajo, y quiero implementar el patron MVC. ...
  #1 (permalink)  
Antiguo 10/07/2011, 16:10
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 15 años, 2 meses
Puntos: 12
Pregunta Consulta acerca del patron MVC

Hola compañors, estoy tratando de finalizar de armar mi framework para poder usarlo en mis aplicaciones para el trabajo, y quiero implementar el patron MVC.
He estado leyendo y mas o menos diria que se de que se trata, de hecho encontre graficos que lo explican bastante bien... Lo que necesito es poder armar las interfaces base para seguir tal patron, y hasta ahora he logrado algo asi:

Código PHP:
Ver original
  1. interface Controller
  2. {
  3.     public function __construct(Application $application);
  4.     public function execute($task);
  5. }
  6.  
  7. interface Model
  8. {
  9.     public function proccess();
  10.     public function getData();
  11. }
  12.  
  13. interface View
  14. {
  15.     public function __construct(Model $model);
  16.     public function display();
  17. }

La clase que implementa Application representaria toda la application que se encarga de cargar todo lo necesario y recibir las "requests" al iniciar para ver que components se van a ejecutar, etc. y asi generar la respuesta cuando todo termine... (A traves de 2 eventos: 'onStartup' y 'onShutdown')

Esto lo deduje a partir del este grafico:


Hasta aqui quedaria que el Controller crearia el Model que procesara y obtendra los datos correspondientes, asi luego creara la vista a la que se le pasan los datos de Model para visualizarlos al usuario correctamente. (¿O me equivoco?)

En base a esto simplemente me gustaria saber si hay algo que no respeta el patron o si le sacarian o agregarian algo... Me gustaria sus opiniones para ver si estoy entendiendo bien el tema. He buscado en Google, y leido en wikipedia etc. Pero lo que estoy buscando son opiniones concretas porque todo lo que encontre hacen las cosas de manera distinta, y exponen grandes codigos de ejemplo (toda una mini applicacion) cuando lo que yo busco es una "base" que me permita entender el tema correctamente, por ej. interfaces exponiendo el patron.

Saludos y espero que entiendan mi consulta.
__________________
Amigos de Foros del Web: seamos más solidarios. ¡No dejemos que un tema se valla al final de las páginas con 0 (cero) respuestas! ¡Gracias por su ayuda! :-)
  #2 (permalink)  
Antiguo 11/07/2011, 00:39
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: Consulta acerca del patron MVC

Me apunto para ver que dicen sobre este tema, muy buena pregunta. Pero lo que te recomiendo es que mejor tomes como referencia algún framework, ejemplo Zend o symfony y que veas como trabajan el controlador, modelo y vista. Mira este buen material para que te puedas desenvolver http://framework.zend.com/manual/en/...art.intro.html

Edito: También puedes ver lo que hacen en las clases, por ejemplo en la documentación http://framework.zend.com/apidoc/1.11/
Mira lo que dice zend_view, zend_controller. No existe un zend_model porque el modelo en el caso de zend tu lo creas, lo que debes hacer es hacer un require_once y llamar el modelo como tu desees.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 11/07/2011 a las 00:54
  #3 (permalink)  
Antiguo 11/07/2011, 00:43
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 3 meses
Puntos: 331
Respuesta: Consulta acerca del patron MVC

Tu consulta es demasiado específica de tu proyecto, tú lo has diseńado y no es fácil dar una opińíon con el código que posteas. No hay una "base" para esto, depende de cada proyecto, aunque sí que hay una teoría. Más que Google y Wikipedia te recomiendo bibliografía especializada como http://www.wrox.com/WileyCDA/WroxTit...764572822.html o esto: http://www.wrox.com/WileyCDA/WroxTit...470496703.html
Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #4 (permalink)  
Antiguo 11/07/2011, 07:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Consulta acerca del patron MVC

El patrón MVC es uno de los mejores patrones para separación de capas y responsabilidades en el diseño de Software. Pero recuerda que es a nivel teorico, y que cada capa es teorica, no hay una "interfaz universal", es simplemente una capa, mientras tu separes en esas capas tu aplicación (aún sin usar POO), estas respetando el MVC.

En teoría un ejemplo así de sencillo respeta el MVC:
models/usuarios.php
Código PHP:
Ver original
  1. <?php
  2. function getActiveUsers()
  3. {
  4.         $sQuery = "SELECT * FROM users WHERE active=1";
  5.         return dbQueryFetchAll($sQuery);
  6. }
listaUsuarios.php
Código PHP:
Ver original
  1. // Modelo
  2. require_once('models/usuarios.php');
  3. if (validateUserLoggedIn()) {
  4. // Vista
  5. require_once('views/listausuarios.php');
  6. } else {
  7. redirect('login.php');
  8. }

views/listausuarios.php
Código PHP:
Ver original
  1. <h1>Active Users</h1>
  2. <ul>
  3. <?php foreach (getActiveUsers() as $User) { ?>
  4. <li><?php echo $User['name']; ?></li>
  5. <?php } ?>
  6. </ul>

Al llamar a listaUsuarios.php el Controller (listaUsuarios.php) busca el modelo que va a usar (models/usuarios.php) verifica si hay una sesión, e inyecta el modelo a la vista para que sea rendereado.

Ahora esas 3 capas son teóricas, y si ves no tienen nada de base en el ejemplo que expongo, simplemente es la separación de responsabilidades de cada capa.

Ahora usando POO, aparte de MVC hay varios patrones a tu disposición, uno de ellos que es el mas usado es el del FrontController, que es el encargado de obtener todos los requests de tu aplicación y decidir que modelo/vista cargar en base a los parámetros de entrada.

Dentro de la vista puedes hacer uso de más patrones (como TwoStepView), y del Modelo también, pero como te digo, no hay nada 100% universal, por lo que cada implementación de cada software puede usar un diseño como guste.

Ahora respecto a tus interfaces yo te diría no las uses, mejor concentrate en entender el patrón al 100%, y luego haz uso de más patrones independientes para hacer un buen diseño de tu sistema.

También puedes ver algunos frameworks (Zend, Symfony, Yii, Cake, CI) para que veas su implementación particular de MVC.

Saludos.
  #5 (permalink)  
Antiguo 11/07/2011, 09:31
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 15 años, 2 meses
Puntos: 12
Respuesta: Consulta acerca del patron MVC

Gracias abimaelrc, repara2 y GatorV por sus respuestas, echare un vistazo a los enlaces que me pasaron, se ven interesantes.

Las interfaces que arme era mas que nada para mostrar y que me digan si estaria implementado bien el patron (usando POO), ya que como decis GatorV, se puede implementar sin la necesidad de usar POO, ademas todos los ejemplos que vi hasta ahora no usaban POO.

Mi punto era tratar de entederlo mejor a traves de un ejemplo con interfaces. Por alguna razon siempre me resulto entender las cosas mejor con ese tipo de ejemplos...

Con respecto a FrontController lo vi nombrarlo pero nunca me llamo la atencion, tendria que explorarlo...

El proyecto en el que estoy trabajando no creo que sera muy grande pero una vez terminado, es algo que me gustaria compartir. Quiero llegar a armar algo muy "basico" o mejor dicho independiente para que se pueda adaptar a todo tipo de proyectos... Por eso es que primero me gusta crear interfaces cuando creo que es necesario y luego las clases.

Saludos.
__________________
Amigos de Foros del Web: seamos más solidarios. ¡No dejemos que un tema se valla al final de las páginas con 0 (cero) respuestas! ¡Gracias por su ayuda! :-)
  #6 (permalink)  
Antiguo 11/07/2011, 09:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Consulta acerca del patron MVC

El problema es ese, que no hay forma de decir si esta bien, de hecho para Zend Framework, uno de los encargados en la parte de MVC, creo una interfaz para el controller, la cual es:
Código PHP:
Ver original
  1. intraface Controller
  2. {
  3.        public function dispatch(Zend_Request_Abstract $Request);
  4. }

Solo eso, el Controller debe de ser capaz de hacer un dispatch del request actual y hasta ahí, esa es su tarea, respecto al modelo no las hay porque el modelo representa tu capa de logica de negocios, y esa es tan diferente por proyecto que no la puedes encapsular en algo que sea continuo.

La capa de la Vista, es lo mismo, es independiente de cada proyecto por lo que lo que más puedes abstraer es que va a recibir un modelo y va a hacer un render.

Saludos.
  #7 (permalink)  
Antiguo 11/07/2011, 10:11
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: Consulta acerca del patron MVC

Por favor...hagan STICKY este tema....
__________________
Salu2!
  #8 (permalink)  
Antiguo 11/07/2011, 14:15
 
Fecha de Ingreso: septiembre-2009
Ubicación: Neuquén
Mensajes: 142
Antigüedad: 15 años, 2 meses
Puntos: 12
Respuesta: Consulta acerca del patron MVC

Gracias GatorV y a todos por ayudarme a entender bien el tema
Veré como me las arreglo en mi proyecto.

¡Saludos!
__________________
Amigos de Foros del Web: seamos más solidarios. ¡No dejemos que un tema se valla al final de las páginas con 0 (cero) respuestas! ¡Gracias por su ayuda! :-)

Etiquetas: controller, model, mvc, php, view
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 13:01.