MVC (Model-View-Controller)

Transcription

MVC(Model-View-Controller)(.o la forma de traer orden al caos.)(BORRADOR)Universidad de los AndesDemián GutierrezDiciembre 20101

¿MVC: Modelo – Vista – Controlador?Desarrollado / Ideado originalmente en XEROX PARC (PaloAlto Research Center Incorporated) por Trygve Reenskaugentre 1978 y 1979Ver: http://heim.ifi.uio.no/ trygver/themes/mvc/mvc-index.htmlEl objetivo del patrón MVC es desacoplar la presentación dela información (vista) de su representación (modelo), para asíreducir la complejidad en el diseño arquitectónico (de IU) eincrementar la flexibilidad y mantenibilidad del códigoTomado de: Desde un punto de vista muy personal (DMI), el patrón MVCes lo que le trae orden al caos, estructura al espagueti,arquitectura a la anarquía en los aspectos relacionados a laimplementación de interfaz de usuario2

¿Sin MVC?Manejo del cicloPetición-RespuestaHTMLLógica deNegociosPHPInterfaz de Usuario(Implementación)Acceso adatosJavaScriptManejo deSesionesSQLEtc.Responsabilidades difusas,todo incrustado en un mismo bloque3

¿Modelo Vista-Documento?Un sólo documento,una sola forma derepresentar/almacenarla informaciónMúltiples vistas,múltiples formas demostrar la mismainformación, porejemplo, un gráfico,una hoja de cálculo,un resumenestadístico, etcéteraSi, yo se que es un plagio. (sue me if you can)TODO: Hacer figura propia ;-)4

¿MVC: Modelo – Vista – Controlador?¿Responsabilidades?5

¿MVC: Modelo – Vista – Controlador?Mantener en memoriala información queviene de la vista y queservirá de entrada alcontroladorRecibir la entrada delusuario y generar eventos alcontrolador. Mostrar lainformación del modelo alusuarioMantener en memoria lainformación generada por elcontrolador y que servirá deentrada para que la vista sela muestre al usuarioProcesar los distintos eventos generados por elusuario, consumir la información proveniente de lavista que se encuentra en el modelo y generarinformación en el modelo para que la vista puedamostrar6

¿MVC: Modelo – Vista – Controlador?En realidad es más de esta forma.7

Capa de PersistenciaCapa dePresentaciónCapa de Negocios(Lógica de Negocios,Reglas de Negocios,etcétera)MVC y Arquitecturas / Aplicaciones por CapasMVC ! Arquitecturas a 3 CapasBD8

MVC y Acceso a BD(M) ! Modelo de Datos (Aunque se puede)ViewModelBDController9

MVC y Acceso a BD(M) ! Modelo de Datos (Aunque se puede)ViewDesde este punto de vista elmodelo sirve a 2 (o 3depende del punto de vista)propósitos (¿mal asunto?ModelBDControllerSi no se usa un modelo atres capas, la lógica denegocios suele terminaraquí10

MVC y Acceso a BD(M) ! Modelo de Datos (Aunque se puede)The Model represents your data structures. Typically yourmodel classes will contain functions that help you retrieve,insert, and update information in your databaseTomado de: http://codeigniter.com/user guide/overview/mvc.htmlThe model is not a database: the 'model' in MVC is both the dataand the business/domain logic needed to manipulate the data in theapplication. Many applications use a persistent storage mechanismsuch as a database to store data. MVC does not specificallymention the data access layer because it is understood to beunderneath or encapsulated by the model. Models are not dataaccess objects; however, in very simple apps that have little domainlogic there is no real distinction to be made. Active Record is anaccepted design pattern which merges domain logic and dataaccess code - a model which knows how to persist itself.Tomado de: 11

MVC y Acceso a BD(M) ! Modelo de Datos (Aunque se puede)Diferencia bien definidaentre IU y persistenciaViewIUModelValue Objects / DataTransfer Objects /JavaBeans / POJOS /etcéteraControllerSi no se usa un modelo atres capas, la lógica denegocios suele terminaraquíDAOs, ORM,Framework dePersistenciapersistenciaBD12

MVC y Acceso a BD(M) ! Modelo de Datos (Aunque se puede)Diferencia bien definidaentre IU y persistenciaViewIUModelValue Objects / DataTransfer Objects /JavaBeans / POJOS /etcéteraControllerSi no se usa un modelo atres capas, la lógica denegocios suele terminaraquíDAOs, ORM,Framework dePersistenciapersistenciaBD13

¿MVC: Modelo – Vista – Controlador?Un ejemplo en la WEBMVC(Framework)(Motor)Vista (IU)(de caModelo(de entrada)Todo es orquestadopor el FrameworkMVC (Inversion ofControl,¿recuerdan?)alimenta,sirve de entradadefineVista (IU)(de salida)alimenta,sirve de entradaControlador(Lógica /Reglas deNegocio)crea,rellenaModelo(de salida)vista modelo RESULTADO!!!14

¿MVC: Modelo – Vista – Controlador?Un ejemplo en la WEBRequest(Ej, Submit)HTML: Estáticoo generado (Ej,con PHP, JSP,etc)MVC(Framework)(Motor)Vista (IU)(de entrada)corresponde,alimenta,No es directo,rellenaes el MVC elque rellenaCon lainformacióndel Request(Ej, GET /POST)Identifica,buscaModelo(de entrada)alimenta,sirve de entradaInteracción conel navegadorHTML: Estáticoo generado (Ej,con PHP, JSP,etc)Vista (IU)(de salida)definealimenta,sirve de entradaUn armazón MVCes quien toma elcontrol(FrontController)Generalmente poralguna convención denombre con el URL opor un parámetroespecial del requestControlador(Lógica /Reglas deNegocio)crea,rellenaModelo(de salida)vista modelo RESULTADO!!!Puede ser el mismo modelo deentrada u otro nuevo de salida15

MVC: Modelo – Vista – ControladorEjemplo Struts1:Uso de un MVCEjemplo PHP:Uso e implementación (básica) de un MVC16

MVC: Modelo – Vista – ControladorMVC(Framework)(Motor)17

MVC: Modelo – Vista – ControladorContiene la información amostrar por la vista (la listade productos) así como lainformación ingresada por elusuario (si existe)Maneja la acción delistar (Va a BD ygenera la lista deproductos)Genera esteHTML en baseal contenido delForm18

MVC: Modelo – Vista – ControladorContiene la información amostrar por la vista (elproducto a editar) así comola información ingresada porel usuario (originada por loscontroles de la IU)Maneja las accionesde ediciónGenera esteHTML en baseal contenido delForm“Actions”Tomados dellistar (pantallaanterior)19

MVC: Modelo – Vista – ct name product/ProductListAction&method ernPHP/go.phpScript PHPejecutado(go.php)?act name product/ProductListAction&method listAllParámetros de la peticiónDe querer hacer(los usa el MVC paradeterminar el Form, elingeniería inversa, yAction y el método dentrocomprender comodel Action a utilizarfunciona el MVC ¿pordónde comenzamos? Por ejemplo, que pasa si.20

MVC: Modelo – Vista – Controlador. en este formulario hacemos click en enviar¡Click! form method "GET" action "go.php" !-- CAMPOS DE CONTROL DEL MVC -- input type "hidden" name "act name" input type "hidden" name "frm name" input type "hidden" name "php self" input type "hidden" name "method"value "product/ProductEditAction"/ value "product/ProductEditForm" / value "product/product edit.php" / value "update" / !-- CAMPOS DE LA ACCIÓN PARTICULAR (Editar) -- input type "hidden" name "mode"value "update" input type "hidden" name "bean idnt" value "6" !-- Los otros campos, el nombre, la descripción, etc -- 21

MVC: Modelo – Vista – ControladorDiagrama de SecuenciaA desarrollar en clase.22

MVC: Modelo – Vista – View-Controller#Implementations of MVC as web-based frameworksPara una lista (probablementeincompleta) de frameworks queimplementan el patrón MVC endistintos lenguajes deprogramación23

Gracias¡Gracias!24

con PHP, JSP, etc) Puede ser el mismo modelo de entrada u otro nuevo de salida. 16 Ejemplo Struts1: Uso de un MVC Ejemplo PHP: Uso e implementación (básica) de un MVC MVC: Modelo – Vista – Controlador. 17 MVC: Modelo – Vista – Controlador MVC (Framework) (Motor) 18 MVC: Modelo – Vista – Controlador Genera este HTML en base al contenido del Form Contiene la información a mostrar .