Modelo-Vista-Controlador
-
Upload
vicente-garcia-diaz -
Category
Documents
-
view
8.279 -
download
0
description
Transcript of 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
Vicente García Díaz
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
¿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
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
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!
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á
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
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
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
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
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
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
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)
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!!
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
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/
Bibliografía17