Modelo-Vista-Controlador

17
INTRODUCCIÓN AL MODELO VISTA - CONTROLADOR Fundamentos de Ingeniería del Software Vicente García Díaz César Fernández Acebal Juan Manuel Cueva Lovelle Escuela de Ingeniería Informática Universidad de Oviedo Curso 2010-2011 [email protected] Vicente García Díaz

description

Introducción al patrón de diseño Modelo-Vista-Controlador para la asignatura de Fundamentos de ingeniería del software de la Escuela de Ingeniería Informática de Oviedo

Transcript of Modelo-Vista-Controlador

Page 1: Modelo-Vista-Controlador

INTRODUCCIÓN AL

MODELO –VISTA - CONTROLADOR

Fundamentos de Ingeniería del Software

Vicente García DíazCésar Fernández AcebalJuan Manuel Cueva LovelleEscuela de Ingeniería InformáticaUniversidad de OviedoCurso 2010-2011

[email protected]

Vicente García Díaz

Page 2: Modelo-Vista-Controlador

Esquema básico del MVC2

ModeloVista

Capa de negocio y de acceso a datos

Capa de presentación

Totalmente independientes. Ninguno sabe de la existencia del otro

Controlador

El Controlador es el único que sabe cómo funciona la Vista y el Modelo

Page 3: Modelo-Vista-Controlador

¿Cuál es la clave para lograrlo?3

Los patrones de diseño El MVC es un patrón de diseño compuesto Patrón de diseño Strategy

El controlador implementa diferentes estrategias

Patrón de diseño Observer El controlador, y a veces, la vista observan continuamente al

modelo

Patrón de diseño Composite La vista suele implementar dicho patrón internamente para

facilitar el trabajo de mostrar la interfaz

Otros patrones como Adapter, Command o Facedetambién tienen cabida con MVC

Para esta introducción no será necesario conocer estos patrones…aunque es muy recomendable, sobre todo el Observer

Page 4: Modelo-Vista-Controlador

Ejemplo de empleo del MVC4

Aplicación Java muy sencilla realizada con Swing

Cuando se enciende la radio, se puede cambiar de emisora. Si la radio está apagada, entonces no se puede hacer nada

Retroceso de emisora Avance de emisora

Aquí nos dice en qué emisora estamos

Page 5: Modelo-Vista-Controlador

Proyecto JAVA5

Lanzamiento del programa

Controlador

Modelo

Vista Vista (creada con Swing)

Modelo

Controlador

Interfaz para que el Modelo pueda ser observado

Interfaz para que el Controlador pueda observar

Es un enumerado que indica al Controlador qué ha cambiado del modelo

El Controlador observa al Modelo. Para ello utilizaremos el patrón de diseño Observer. Es la clave de MVC!

Page 6: Modelo-Vista-Controlador

El lanzamiento del programa6

Sólo hay que instanciar al Controlador. Él es el que lo gestiona todo! O lo que es lo mismo, el Controlador puede verse como el punto de entrada al programa

…aunque podría ser mucho más sofisticado. Por ejemplo, podrían incluirse parámetros de configuración o una instancia del Model0 que se utilizará

Page 7: Modelo-Vista-Controlador

El modeloIObservable.java

7

La clase Model implementa esta interfaz El Modelo puede ser OBSERVADO

addObserver sirve para que el Modelo pueda tener internamente diferentes “observadores”. Es decir, el Modelo es un IObservable, y al Modelo lo observan elementos que hayan implementado la interfaz IObserver.

Así, cualquier objeto que haya implementa la interfaz IObserver puede ser el parámetro que se le pasa al método

notifyObserver sirve para que el Modelo notifique a todos los elementos que lo están observando (todos los que han sido pasados a addObserver previamente) que algo ha cambiado en el sistema (e.g. un usuario se logea, ocurre un fallo, etc…)

En este caso, se utiliza un enumerado UpdateInfo con diferentes valores en función de qué ha ocurrido

Page 8: Modelo-Vista-Controlador

El modeloModel.java (1/2)

8

Se añaden observadores

Sigue en la siguiente diapositiva

Cuando se invoca este método, se avisa (notifica) a todos los observadores de algún cambio importante en el Modelo

Típico constructor

Page 9: Modelo-Vista-Controlador

El modeloModel.java (2/2)

9

Cuando se enciende la radio, el Modelo “busca” 8 emisoras de radio y las guarda en su “memoria”. Además notifica a los observadores cuando finaliza su proceso

En este caso, apagar la radio es directo. Notifica a los observadores directamente

Cuando se avanza de emisora y se llega al límite de 8, se vuelve a la primera. Luego, notifica a sus observadores

Análogo para cuando se retrocede de emisora

Aquí, el Modelo devuelve la emisora actual. No se lo notifica a nadie, simplemente porque no se consideró importante hacerlo en este caso

Page 10: Modelo-Vista-Controlador

La vistaView.java (1/2)

10

Sigue en la siguiente diapositiva

El Vista guarda una referencia al Controlador. Muy importante porque la Vista delega al Controlador la responsabilidad de ejecutar los métodos oportunos del Modelo. ¿Por qué? porque la Vista no conoce al Modelo y el Modelo no conoce a la Vista. El único que conoce a ambos es el Controlador. Esta es la clave de la independencia en el diseño

La Vista ni siquiera sabe lo que significan sus botones. Así, se permite que diferentes Controladores invoquen diferentes funcionalidades en diferentes Modelos (o en el mismo) La Vista únicamente ofrece métodos para utilizar los elementos de la interfaz ¿Cómo se usan dichos elementos? Eso es responsabilidad del Controlador

Page 11: Modelo-Vista-Controlador

La vistaView.java (2/2)

11

Se delega al Controlador la responsabilidad de invocar el método oportuno en el Modelo ante los diferentes eventos de usuario que pueden existir al accionar los botones de la interfaz. La Vista no sabe qué sucede cuando un usuario invoca un evento, sólo sabe que lo ha invocado

*** La interfaz está hecha con Swing para este ejemplo y los ActionPerformed son los eventos producidos por el usuario

Page 12: Modelo-Vista-Controlador

El controladorIObserver.java

12

La clase Controller implementa esta interfaz El Controlador es un OBSERVADOR

update es el método que se llama para cada uno de los observadores cuando el Modelo invoca al método notifyObserver. A update se le pasa un valor de un enumerado UpdateInfo, que sirve para especificarle al Controlador qué es lo que ha cambiado del Modelo

Page 13: Modelo-Vista-Controlador

El controladorUpdateInfo.java

13

Con este enumerado, el Modelo le puede decir al Controlador si lo que ha cambiado en el sistema es que se ha encendido la radio, si se ha apagado o si se ha cambiado la emisora actual que se estaba escuchando…

O lo que es lo mismo, el Modelo avisa a todos los que lo observan de sus cambios internos más significativos (podrían ser otros cambios en lugar de los 3 del ejemplo)

Page 14: Modelo-Vista-Controlador

El controladorController.java (1/2)

14

El Controlador es el único que conoce a la Vista y al Modelo

Esto permite una total independencia entre Vista y Modelo. Sin embargo, el Controlador suele ser un componente bastante sencillo (es únicamente un mediador entre Vista y Modelo). Así, realizar cambios en el comportamiento de una Vista con un Modelo es relativamente sencillo. Además, no habría que tocar ni la Vista, ni el Modelo, componentes más complejos con el Controlador

Cuando el Modelo notifica al Controlador, el Controlador decide hacer “cosas” con la Vista ¿Qué cosas? las que el Controlador quiera en función de los métodos que le ofrezca la Vista

Muy importante!!

Page 15: Modelo-Vista-Controlador

El controladorController.java (2/2)

15

En este caso, el trabajo del Controlador es muy sencillo. Cuando la Vista invoca a un método del Controlador, éste únicamente tiene que invocar al método de igual nombre del Modelo. Sin embargo, en la práctica no siempre será así. Es muy normal que el Controlador haga algún tipo de procesamiento aunque sea pequeño

Por ejemplo, la Vista le podría pasar al Controlador la orden SubirVolumen. Si el Modelo tuviera un nivel de volumen desde 0 hasta 100, el Controlador podría, por ejemplo, invocar un método del Modelo como SubirVolumen(5), indicando que cuando la Vista pide SubirVolumen, el Modelo debe hacerlo de 5 en 5 unidades

Page 16: Modelo-Vista-Controlador

Capacidad de adaptación del MVC16

El MVC tiene múltiples implementaciones. Algunas: .NET ASP.NET MVC

JAVA Spring MVC

PHP Zend Framework

Ruby Ruby on Rails

Permite adaptaciones Habría que utilizar interfaces, no implementaciones

El modelo podría ser un parámetro del controlador

La vista observa directamente al modelo

La vista accede directamente a algún getter del modelo

Empleo de múltiples controladores para subsistemas

http://mvc.asp.net

etc…

Al igual que todos los patrones de diseño…

http://www.springsource.org/

http://rubyonrails.org/

http://framework.zend.com/

Page 17: Modelo-Vista-Controlador

Bibliografía17