Download Componentes
Document related concepts
no text concepts found
Transcript
Diseño y Desarrollo de Software Model View Controller Architecture Dra. Marcela Capobianco 1 ¿Qué es MVC? Model View Controller (MVC) es un patrón agregado que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos El patrón MVC se ve frecuentemente en aplicaciones web En este caso la vista es la página HTML y el código que provee de datos dinámicos a la página Componentes Modelo: representación específica del dominio de la información sobre la cual funciona la aplicación. La lógica de dominio añade significado a los datos. Ejemplo: calcular los importes en un carrito de compras Vista: presenta el modelo en un formato adecuado para interactuar, usualmente un elemento de interfaz de usuario. Componentes Controlador: responde a eventos, usualmente acciones del usuario, e invoca cambios en el modelo y probablemente en la vista. Muchas aplicaciones utilizan un mecanismo de almacenamiento (base de datos) MVC no menciona específicamente esta capa de acceso a datos. De donde surge En general una aplicación tiene tres capas principales: presentación (UI), dominio, acceso a datos MVC divide la capa de presentación en controlador y vista. Existen muchas implementaciones diferentes de MVC que en general siguen el mismo flujo de control Flujo de control 1.El usuario interactúa con la interfaz (por ejemplo, el usuario pulsa un botón) 2.El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción del usuario (gestor de eventos) 3.El controlador accede al modelo, modificándolo de forma adecuada a la acción solicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario) Flujo de control Los controladores complejos están a menudo estructurados usando un patrón de comando que encapsula las acciones y simplifica su extensión. 4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se refleja los cambios en el modelo (ej: produce un listado del Flujo de control El modelo no debe tener conocimiento directo sobre la vista. El patrón de observador puede ser utilizado para proveer cierta indirección entre el modelo y la vista Esto permite al modelo notificar a los interesados de cualquier cambio. Un objeto vista puede registrarse con el modelo y esperar a los cambios, aun así el modelo en sí mismo sigue sin saber nada Flujo de control El controlador no pasa objetos de dominio (modelo) a la vista aunque puede dar la orden a la vista para que se actualice. En algunas implementaciones la vista no tiene acceso directo al modelo, dejando que el controlador envíe los datos del modelo a la vista. 5. La interfaz espera nuevas interacciones del usuario, comenzando el ciclo nuevamente. Flujo de control El paradigma MVC crea al objeto controlador entre la vista y el modelo para ocmunicarse. La implementación del controlador puede variar pero la idea es transformar eventos en cambios en los datos Relación con patrones de diseño MVC separa el modelo de las vistas Un mismo modelo puede tener varias vistas asociadas Recordemos: patrón Observer •Intención: Define una dependencia entre objetos de uno-a-muchos de forma tal que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados acordemente. •Alias: Dependents, Publish-Suscribe •Aplicabilidad: Usaremos este patrón cuando: • Cuando una abstracción tiene dos aspectos, uno independiente del otro. • Cuando un cambio a un objeto requiere cambios en otros, y no sabemos cuántos objetos necesitan ser cambiados. • Cuando un objeto debería notificar a otros objetos sin realizar suposiciones de quiénes son esos objetos (evitar el acoplamiento) Patrón Observer Patrón Observer •Estructura de colaboración Relación con patrones de diseño Para desconectar las vistas del modelo se utiliza el patrón observer Las vistas en MVC pueden estar anidadas Un panel de control puede contener botones tal que c/u es implementado como una vista Se usa una subclase de view llamada compositeview Queremos tratar a compositeview de la misma forma que se trata a sus Recordemoa: patrón Composite •Intención: Compone objetos en estructuras de árbol para representar jerarquías de relación “es-partede”. •Aplicabilidad: Usaremos este patrón cuando: • Queremos representar jerarquías de objetos modelando la relación “es-parte-de” (part-whole hierarchies) • Queremos que el cliente ignore la distinción entre objetos compuestos y objetos individuales. El cliente tratará todos los objetos de la estructura compuesta de manera uniforme. Patrón Composite Patrón Composite • Component: declara la interfaz para los objetos en la composición. • Implementa el comportamiento por defecto para todos los objetos. • Declara la interfaz para acceder y manipular los componentes hijos. • Opcionalmente implementa una interfaz para acceder al padre. Patrón Composite • Leaf: representa los objetos simples en la composición. Define el comportamiento de tipos primitivos. • Composite: define el comportamiento para componentes compuestos. Almacena estos componentes e implementa operaciones relacionadas a su administración. • Client: Manipula los objetos en la composición por medio de la interfaz Component. Este patrón simplifica la implementación del cliente Relación con patrones de diseño Queremos tratar a compositeview de la misma forma que se trata a sus componentes Para esto usamos el patrón composite También permite cambiar la forma que una vista responde al usuario sin cambiar su representación visual Basta con reemplazar la instancia del controlador Patrón Strategy •Intención: Define una familia de algoritmos, encapsula cada uno convirtiéndolos en intercambiables. Permite variar un algoritmo independientemente de los clientes que lo utilizan. •Alias: Policy •Aplicabilidad: Usaremos este patrón cuando: • Muchas clases relacionadas difieren únicamente en el comportamiento. • Necesitamos diferentes variantes de un algoritmo. • Un algoritmo utiliza datos que el cliente no debe conocer. • Una clase define múltiples comportamientos, y éstos figuran como sentencias condicionales múltiples en sus Patrón Strategy - Estructura Patrón Strategy •Participantes: • Strategy: declara una interfaz común a todos los algoritmos soportados. • ConcreteStrategy: implementa un algoritmo utilizando la interfaz Strategy. • Context: está configurado con un objeto de tipo ConcreteStrategy. Mantiene una referencia a un objeto Strategy. Puede definir, si es necesario, una interfaz para que Strategy acceda a sus datos. Relación con patrones de diseño El patrón Strategy nos permitirá cambiar la instancia del controlador aún en tiempo de ejecución Por ejemplo, una vista puede ser desabilitada simplemente creando una instancia de controller que ignora los eventos de entrada Análisis Siempre hay que considerar si es la opción más conveniente para la situación dada Posee ventajas dado que la estabilidad del modelo no es la misma que la de la vista Si el modelo fue construido correctamente es en general bastante estable Esto no es cierto para la interfase Separarlos hace que el modelo sea más robusto Implementaciones Fue descripto por primera en 1979 por Trygve Reenskaug El autor trabajaba para Xerox research labs sobre Smalltalk La implementación original se describe en: Applications Programming in Smalltalk80(TM):How to use Model-View-Controller. Implementaciones Esta implementación inspiró a muchos otros como: • Cocoa y GNUstep, usan MVC. • Microsoft Foundation Classes (MFC). • Java Swing GUI library. • Qt Toolkit desde Qt4 Release. Más recientemente se lo ha propuesto como solución para aplicaciones Web Implementaciones Implementaciones más populares orientadas a la web: JavaServer Faces Apache Struts Webwork2 Apache Struts está orientado a las páginas enteras y JSF a un nivel de componentes Java Server Faces JavaServer Faces (JSF) es un application framework basado en Java Simplifica el desarrollo de interfases para aplicaciones Java EE JSF usa JavaServer Pages como display technology y puede acomodar otras tecnologías: Java Server Faces JSF incluye: Un conjunto de APIs paa representar componentes de la interfaz de usuario, manejar su estado, eventos, entrada, accesibilidad, internacionalización Conjunto default de UI Dos librerias JavaServer Pages (JSP) para disponer de un interfase JSF en un página JSP. Server-side event model Objetivos de diseño Crear un framework de componentes GUI estandard que pueda hacer más facil para los usuarios de los tools desarrollar GUIs y manejar las conexiones con el comportamiento Definir un conjunto de clases básicas para GUI components, component state, y eventos de entrada. Proveer un modelo JavaBeans para enviar eventos desde el client-side GUI al serverside application behavior. Objetivos de diseño Definir APIs para validación de la entrada, incluyendo soporte para client-side validation Especificar un model para internationalición y localización de la GUI Generación automatica de salida apropiada para el cliente (tomando en cuenta configuration data, browser version, etc). Struts Estuvo dentro del Jakarta Project y actualmente es un proyecto top level Es un open-source framework para desarrollar Java EE aplicaciones web Usa y extiende el API Java Servlet para fomentar el uso de la architectura MVC Fue creado originalmente por Craig McClanahan y donado a la Apache Foundation en el 2000 Struts Permite el diseño e implementación de grandes aplicaciones web por grandes grupos de desarrolladores Diseñadores de páginas, componentes y otros desarrolladores pueden trabajar en forma desacoplada Incorpora I18N (internationalization), form validation y variedad de presentation layers: JSP, XML/XSLT, JavaServer Faces (JSF) También model layers:JavaBeans and EJB.