patrón mvc modelo vista controlador

9
25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 1/9 Blog dedicado a la enseñanza gratuita, utilizando JavaScript, CSS, HTML, PHP, MySQL, UML, Patrones de Diseño. INICIO VIDEO CURSOS CURSOS PATRÓN MVC MODELO VISTA CONTROLADOR EN PHP viernes, octubre 08, 2010 admin El patrón clásico del diseño web conocido como arquitectura MVC, está formado por tres niveles: 1. El modelo representa la información con la que trabaja la aplicación, es decir, su lógica de negocio. 2. La vista transforma el modelo en una página web que permite al usuario interactuar con ella. 3. El controlador se encarga de procesar las interacciones del usuario y realiza los cambios apropiados en el modelo o en la vista. La arquitectura MVC separa la lógica de negocio (el modelo)y la presentación (la vista) por lo que se consigue un mantenimiento más sencillo de las aplicaciones. Si por ejemplo una misma aplicación debe ejecutarse tanto en un navegador estándar como un navegador de un dispositivo móvil, solamente es necesario crear una vista nueva para cada dispositivo; manteniendo el controlador y el modelo original. El controlador se encarga de aislar al modelo y a la vista de los detalles del protocolo utilizado para las peticiones (HTTP, consola de comandos, email, etc.). El modelo se encarga de la abstracción de la lógica relacionada con los datos, haciendo que la vista y las acciones sean independientes de, por ejemplo, el tipo de gestor de bases de datos utilizado por la aplicación. SUSCRIPCIÓN VIA EMAIL Introducir la dirección de email: Subscribe ENTRADAS POPULARES Patrón MVC Modelo Vista Controlador en PHP El patrón clásico del diseño web conocido como arquitectura MVC, está formado por tres niveles: 1. El modelo representa la inform... Libro gratuito de jQuery en español: Fundamentos de jQuery Después de un par de meses de trabajo, les quería contar sobre mi pequeño aporte a la comunidad de diseñadores y desarrolladores web: Fun... Patrón Singleton en PHP5 El patrón de diseño " Singleton " está diseñado para restringir la creación de objetos pertenecientes a una clase, for... Patrón Simple Factory en PHP5 Factory Method o Simple Factory "Clase con la responsabilidad de crear objetos de otras clases. No delega en subclases y s... PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos (Primera parte) PDO (PHP Data Objects) es una extensión nativa de PHP5, consiste en una interface uniforme para acceder a varias bases de datos . PDO pro... HTML5, CSS3 colección de mejores libros y cheat sheets HTML5 y CSS3 son los dos nuevos estándares de la W3C. Aquí les comparto una lista valiosos recursos, libros, Sheets, de lo mejor que he enc... Sitios para descargar código fuente gratis ¿Cuantas veces los programadores nos vemos en la necesidad de investigar el código fuente de una PÁGINA PRINCIPAL POSTS RSS COMENTARIOS RSS

Upload: sebastian-diaz

Post on 27-Oct-2015

144 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 1/9

Blog dedicado a la enseñanza gratuita, utilizando JavaScript, CSS,HTML, PHP, MySQL, UML, Patrones de Diseño.

INICIO VIDEO CURSOS CURSOS

PATRÓN MVC MODELO VISTA CONTROLADOR ENPHP

viernes, octubre 08, 2010 admin

El patrón clásico del diseño web conocido comoarquitectura MVC, está formado por tres niveles:

1. El modelo representa la información con la que trabaja laaplicación, es decir, su lógica de negocio.2. La vista transforma el modelo en una página web que permite al usuario interactuar conella.3. El controlador se encarga de procesar las interacciones del usuario y realiza loscambios apropiados en el modelo o en la vista.

La arquitectura MVC separa la lógica de negocio (el modelo) y la presentación (lavista) por lo que se consigue un mantenimiento más sencillo de las aplicaciones. Si porejemplo una misma aplicación debe ejecutarse tanto en un navegador estándar como unnavegador de un dispositivo móvil, solamente es necesario crear una vista nueva paracada dispositivo; manteniendo el controlador y el modelo original. El controlador seencarga de aislar al modelo y a la vista de los detalles del protocolo utilizado para laspeticiones (HTTP, consola de comandos, email, etc.). El modelo se encarga de laabstracción de la lógica relacionada con los datos, haciendo que la vista y lasacciones sean independientes de, por ejemplo, el tipo de gestor de bases de datosutilizado por la aplicación.

SUSCRIPCIÓN VIA EMAIL

Introducir la dirección de email:

Subscribe

ENTRADAS POPULARES

Patrón MVC Modelo VistaControlador en PHPEl patrón clásico del diseño webconocido como arquitectura MVC,está formado por tres niveles: 1. Elmodelo representa la inform...

Libro gratuito de jQuery en español: Fundamentosde jQueryDespués de un par de meses de trabajo, lesquería contar sobre mi pequeño aporte a lacomunidad de diseñadores y desarrolladores web:Fun...

Patrón Singleton en PHP5El patrón de diseño " Singleton "está diseñado para restringir lacreación de objetos pertenecientesa una clase, for...

Patrón Simple Factory en PHP5Factory Method o Simple Factory "Clase con la responsabilidad decrear objetos de otras clases. Nodelega en subclases y s...

PDO (PHP Data Objects). Capa deAbstracción de acceso a Bases deDatos (Primera parte)PDO (PHP Data Objects) es unaextensión nativa de PHP5, consisteen una interface uniforme para

acceder a varias bases de datos . PDO pro...

HTML5, CSS3 colección de mejores libros y cheatsheetsHTML5 y CSS3 son los dos nuevos estándaresde la W3C. Aquí les comparto una lista valiososrecursos, libros, Sheets, de lo mejor que he enc...

Sitios para descargar código fuente gratis¿Cuantas veces los programadores nos vemos enla necesidad de investigar el código fuente de una

PÁGINA PRINCIPAL POSTS RSS COMENTARIOS RSS

Page 2: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 2/9

Las capas de la arquitectura MVC

Para poder entender las ventajas de utilizar el patrón MVC, se va a transformar unaaplicación simple realizada con PHP en una aplicación que sigue la arquitectura MVC. Unbuen ejemplo para ilustrar esta explicación es el de mostrar una lista con las últimasentradas o artículos de un blog como este mismo http://arleytriana.blogspot.com.

Programación simple y llana

Utilizando solamente PHP normal y corriente, el script necesario para mostrar los artículosalmacenados en una base de datos se muestra a continuación:

Un script simple

<?php// Conectar con la base de datos y seleccionarla$conexion = mysql_connect('localhost', 'miusuario', 'micontrasena');mysql_select_db('blog_db', $conexion);// Ejecutar la consulta SQL$resultado = mysql_query('SELECT fecha, titulo FROM articulo',$conexion);?><html><head><title>Listado de Artículos</title></head><body><h1>Listado de Artículos</h1><table><tr><th>Fecha</th><th>Titulo</th></tr><?php// Mostrar los resultados con HTMLwhile ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC))echo "\t<tr>\n";printf("\t\t<td> %s </td>\n", $fila['fecha']);printf("\t\t<td> %s </td>\n", $fila['titulo']);echo "\t</tr>\n";?></table></body>

aplicación que hace determinada cosa para a...

Patrón de diseño Decorator enPHP5 Patrón Decorator responde a lanecesidad de agregar funcionalidada un objeto por medio de laasociación de clases. Es un objeto

con e...

Estilo arquitectónico capasLa programación por capas es unestilo de programación en el que elobjetivo primordial es la separaciónde la lógica de negocios de ...

Se ha producido un error en este gadget.

Se ha producido un error en este gadget.

SEGUIDORES

Participar en este sitioGoogle Friend Connect

Miembros (19)

¿Ya eres miembro? Iniciar sesión

ARTÍCULOS ANTERIORES

2012 (7)

2011 (131)

2010 (145)

diciembre (40)

noviembre (39)

octubre (18)

septiembre (16)

agosto (29)

julio (2)

mayo (1)

2009 (6)

CATEGORÍAS

Curso de CodeIgniter (11)

Curso de CSS3 (6)

Curso de Drupal (35)

Curso de Drupal 7 (5)

Curso de Escolar 2.0 (8)

Curso de Git y GitHub (1)

Curso de Hacking Ético (4)

Page 3: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 3/9

</html><?php// Cerrar la conexionmysql_close($conexion);?>

El script anterior es fácil de escribir y rápido de ejecutar, pero muy difícil demantener y actualizar. Los principales problemas del código anterior son:

No existe protección frente a errores (¿qué ocurre si falla la conexión con la base dedatos?).El código HTML y el código PHP están mezclados en el mismo archivo e incluso enalgunas partes están entrelazados.El código solo funciona si la base de datos es MySQL.

Separando la presentación

Las llamadas a echo y printf del listado anterior dificultan la lectura del código. De hecho,modificar el código HTML del script anterior para mejorar la presentación es un muycomplicado debido a cómo está programado. Así que el código va a ser dividido en dospartes. En primer lugar, el código PHP puro con toda la lógica de negocio se incluye en elscript del controlador, como se muestra a continuación.

La parte del controlador, en index.php

<?php// Conectar con la base de datos y seleccionarla$conexion = mysql_connect('localhost', 'miusuario', 'micontrasena');mysql_select_db('blog_db', $conexion);// Ejecutar la consulta SQL$resultado = mysql_query('SELECT fecha, titulo FROM articulo',$conexion);// Crear el array de elementos para la capa de la vista$articulos = array();while ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC))$articulos[] = $fila;// Cerrar la conexiónmysql_close($conexion);// Incluir la lógica de la vistarequire('vista.php');?>

El código HTML, que contiene cierto código PHP a modo de plantilla, se almacena en elscript de la vista, como se muestra a continuación.

La parte de la vista, en vista.php

<html><head><title>Listado de Artículos</title></head><body><h1>Listado de Artículos</h1><table><tr><th>Fecha</th><th>Título</th></tr><?php foreach ($articulos as $articulo): ?><tr>

Curso de html5 (13)

Curso de Java (2)

Curso de Joomla (3)

Curso de Jquery (11)

Curso de PHP y MySQL (20)

Curso de Postgres (8)

Curso de Programación para Android (1)

Curso de Ubercart (12)

DOM (1)

drupal (15)

ebook (4)

fuentes y tipografías (2)

HTML5 (12)

IDE (2)

Javascript (10)

joomla (5)

jquery (19)

MySQL (4)

navegadores (5)

patrones de diseño (7)

php (6)

PHP Orientado a Objetos (9)

Seguridad Informática (16)

templates (10)

XHTML y CSS (15)

Page 4: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 4/9

<td><?php echo $articulo['fecha'] ?></td><td><?php echo $articulo['titulo'] ?></td></tr><?php endforeach; ?></table></body></html>

Una buena regla general para determinar si la parte de la vista está suficientemente limpiade código es que debería contener una cantidad mínima de código PHP, la suficiente comopara que un diseñador HTML sin conocimientos de PHP pueda entenderla. Lasinstrucciones más comunes en la parte de la vista suelen ser echo, if/else,foreach/endforeach y poco más. Además, no se deben incluir instrucciones PHP quegeneren etiquetas HTML.

Toda la lógica se ha centralizado en el script del controlador, que solamente contienecódigo PHP y ningún tipo de HTML. De hecho, y como puedes imaginar, el mismocontrolador se puede reutilizar para otros tipos de presentaciones completamentediferentes, como por ejemplo un archivo PDF o una estructura de tipo XML.

Separando la manipulación de los datos

La mayor parte del script del controlador se encarga de la manipulación de los datos. Pero,¿qué ocurre si se necesita la lista de entradas del blog para otro controlador, por ejemplouno que se dedica a generar el canal RSS de las entradas del blog? ¿Y si se quierencentralizar todas las consultas a la base de datos en un único sitio para evitarduplicidades?

¿Qué ocurre si cambia el modelo de datos y la tabla articulo pasa a llamarse articulo_blog?¿Y si se quiere cambiar a PostgreSQL en vez de MySQL? Para poder hacer todo esto, esimprescindible eliminar del controlador todo el código que se encarga de la manipulaciónde los datos y ponerlo en otro script, llamado el modelo, tal y como se muestra acontinuación.

La parte del modelo, en modelo.php

<?phpfunction getTodosLosArticulos()// Conectar con la base de datos y seleccionarla$conexion = mysql_connect('localhost', 'miusuario', 'micontrasena');mysql_select_db('blog_db', $conexion);// Ejecutar la consulta SQL$resultado = mysql_query('SELECT fecha, titulo FROM articulo',$conexion);// Crear el array de elementos para la capa de la vista$articulos = array();while ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC))$articulos[] = $fila;// Cerrar la conexiónmysql_close($conexion);return $articulos;?>

El controlador modificado se puede ver aquí.

La parte del controlador, modificada, en index.php

Page 5: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 5/9

<?php// Incluir la lógica del modelorequire_once('modelo.php');// Obtener la lista de artículos$articulos = getTodosLosArticulos();// Incluir la lógica de la vistarequire('vista.php');?>

Ahora el controlador es mucho más fácil de leer. Su única tarea es la de obtener losdatos del modelo y pasárselos a la vista. En las aplicaciones más complejas, elcontrolador se encarga además de procesar las peticiones, las sesiones de losusuarios, la autenticación, etc. El uso de nombres apropiados para las funciones delmodelo hace que sea innecesario añadir comentarios al código del controlador.

El script del modelo solamente se encarga del acceso a los datos y puede serreorganizado a tal efecto. Todos los parámetros que no dependen de la capa de datos(como por ejemplo los parámetros de la petición del usuario) se deben obtener a través delcontrolador y por tanto, no se puede acceder a ellos directamente desde el modelo. Lasfunciones del modelo se pueden reutilizar fácilmente en otros controladores.

Separación en capas más allá del MVC

El principio más importante de la arquitectura MVC es la separación del código delprograma en tres capas, dependiendo de su naturaleza. La lógica relacionada con losdatos se incluye en el modelo, el código de la presentación en la vista y la lógica de laaplicación en el controlador.

La programación se puede simplificar si se utilizan otros patrones de diseño. De estaforma, las capas del modelo, la vista y el controlador se pueden subidividir en máscapas.

Abstracción de la base de datos

La capa del modelo se puede dividir en la capa de acceso a los datos y en la capa deabstracción de la base de datos. De esta forma, las funciones que acceden a los datosno utilizan sentencias ni consultas que dependen de una base de datos, sino que utilizanotras funciones para realizar las consultas. Así, si se cambia de sistema gestor de basesde datos, solamente es necesario actualizar la capa de abstracción de la base de datos.

La parte del modelo correspondiente a la abstracción de la base de datos: muestrauna capa de acceso a datos específica para MySQL.

<?phpfunction crear_conexion($servidor, $usuario, $contrasena)return mysql_connect($servidor, $usuario, $contrasena);function cerrar_conexion($conexion)mysql_close($conexion);function consulta_base_de_datos($consulta, $base_datos, $conexion)mysql_select_db($base_datos, $conexion);return mysql_query($consulta, $conexion);function obtener_resultados($resultado)

Page 6: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 6/9

return mysql_fetch_array($resultado, MYSQL_ASSOC);?>

La parte del modelo correspondiente al acceso a los datos: muestra una capasencilla de abstracción de la base de datos.

<?phpfunction getTodosLosArticulos()// Conectar con la base de datos$conexion = crear_conexion('localhost', 'miusuario', 'micontrasena');// Ejecutar la consulta SQL$resultado = consulta_base_de_datos('SELECT fecha, titulo FROMarticulo', 'blog_db', $conexion);// Crear el array de elementos para la capa de la vista$articulos = array();while ($fila = obtener_resultados($resultado))$articulos[] = $fila;// Cerrar la conexióncerrar_conexion($conexion);return $articulos;?>

Como se puede comprobar, la capa de acceso a datos no contiene funcionesdependientes de ningún sistema gestor de bases de datos, por lo que es independiente dela base de datos utilizada. Además, las funciones creadas en la capa de abstracción de labase de datos se pueden reutilizar en otras funciones del modelo que necesiten acceder ala base de datos.

NOTA

Estos últimos dos ejemplos no son completos, y todavía hace falta añadir algo de códigopara tener una completa abstracción de la base de datos (abstraer el código SQLmediante un constructor de consultas independiente de la base de datos, añadir todaslas funciones a una clase, etc.) El propósito de este artículo no es mostrar cómo se puedeescribir todo ese código.

Los elementos de la vista

La capa de la vista también puede aprovechar la separación de código. Las páginasweb suelen contener elementos que se muestran de forma idéntica a lo largo de toda laaplicación: cabeceras de la página, el layout genérico, el pie de página y la navegaciónglobal. Normalmente sólo cambia el interior de la página. Por este motivo, la vista sesepara en un layout y en una plantilla. Normalmente, el layout es global en toda laaplicación o al menos en un grupo de páginas. La plantilla sólo se encarga de visualizar lasvariables definidas en el controlador. Para que estos componentes interaccionen entre sícorrectamente, es necesario añadir cierto código. Siguiendo estos principios, la parte de lavista del scrip inicial se puede separar en tres partes.

La parte de la plantilla de la vista, en miplantilla.php

<h1>Listado de Artículos</h1><table><tr><th>Fecha</th><th>Título</th></tr><?php foreach ($articulos as $articulo): ?><tr>

Page 7: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 7/9

<td><?php echo $articulo['fecha'] ?></td><td><?php echo $articulo['titulo'] ?></td></tr><?php endforeach; ?></table>

La parte de la lógica de la vista

<?php$titulo = 'Listado de Artículos';$contenido = include('miplantilla.php');?>

La parte del layout de la vista

<html><head><title><?php echo $titulo ?></title></head><body><?php echo $contenido ?></body></html>

Acciones y controlador frontal

En el ejemplo anterior, el controlador no se encargaba de realizar muchas tareas, pero enlas aplicaciones web reales el controlador suele tener mucho trabajo. Una parte importantede su trabajo es común a todos los controladores de la aplicación. Entre las tareascomunes se encuentran el manejo de las peticiones del usuario, el manejo de la seguridad,cargar la configuración de la aplicación y otras tareas similares. Por este motivo, elcontrolador normalmente se divide en un controlador frontal, que es único para cadaaplicación, y las acciones, que incluyen el código específico del controlador de cadapágina.

Una de las principales ventajas de utilizar un controlador frontal es que ofrece un puntode entrada único para toda la aplicación. Así, en caso de que sea necesario impedir elacceso a la aplicación, solamente es necesario editar el script correspondiente alcontrolador frontal. Si la aplicación no dispone de controlador frontal, se debería modificarcada uno de los controladores.

Orientación a objetos

Los ejemplos anteriores utilizan la programación procedimental. Las posibilidades queofrecen los lenguajes de programación modernos para trabajar con objetos permitensimplificar la programación, ya que los objetos pueden encapsular la lógica, heredarmétodos y atributos entre diferentes objetos y proporcionan una serie de convencionesclaras sobre la forma de nombrar a los objetos.

La implementación de una arquitectura MVC en un lenguaje de programación que no estáorientado a objetos puede encontrarse con problemas de namespaces y código duplicado,dificultando la lectura del código de la aplicación.

La orientación a objetos permite a los desarrolladores trabajar con objetos de la vista,objetos del controlador y clases del modelo, transformando las funciones de losejemplos anteriores en métodos. Se trata de un requisito obligatorio para las arquitecturasde tipo MVC.

Otros artículos sobre Patrones

Page 8: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 8/9

1. Patron Singleton en PHP2. Patrón de diseño Decorator en PHP3. Patrón Simple Factory en PHP4. Patrón Registry en PHP

Sugerencias

Si quieres profundizar en el tema de los patrones de diseño para las aplicaciones web en elcontexto de la orientación a objetos, puedes leer “Patterns of Enterprise ApplicationArchitecture” de Martin Fowler (AddisonWesley, ISBN: 0321127420). El código deejemplo del libro de Fowler está escrito en Java y en C#, pero es bastante fácil de leer paralos programadores de PHP.

6 COMENTAR IOS :

PUBL ICAR UN COMENTAR IO EN LA EN TRADA

jesus dijo...

Muy buen documento, me ha ayudado mucho

1 DE AGOSTO DE 2012 19:16

Matecito dijo...

Excelente explicación, sencilla y entendible, muchisimas gracias.

1 DE OCTUBRE DE 2012 12:54

dfd dijo...

Muy buena explicacion, graciaas.

Tendras algun ejemplo aplicando POO

7 DE NOVIEMBRE DE 2012 20:32

jose manuel cristobal vera dijo...

Muy bien explicado, muchas gracias

18 DE ENERO DE 2013 01:34

JOSE VICTOR BERNAL JIMENEZ dijo...

Saludos.

Muy bueno te felicito y tengo una pregunta. Puedo comenzar a programar con un framework sin tener la

experiencia php. Quiero decir solo tengo nociones de php y experiencia en programacion en otros

lenguajes procedimentales.

Gracias.

21 DE MARZO DE 2013 13:51

admin dijo...

Hola Jose,

No te lo recomiendo, primero sienta las bases.

Saludos

22 DE MARZO DE 2013 21:08

Page 9: Patrón MVC Modelo Vista Controlador

25/08/13 Patrón MVC Modelo Vista Controlador en PHP ~ Desarrollador Senior

desarrolladorsenior.blogspot.com/2010/10/patron-mvc-modelo-vista-controlador-en.html 9/9

Introduce tu comentario...

Comentar como: Cuenta de Google

Publicar Vista previa

Pages 73 1 2 3 4 »

Desarrollador Senior © 2012 está licenciado bajo una Licencia Creative Commons ReconocimientoNo comercialCompartir bajo la misma licencia 3.0España.