Está en la página 1de 17

Fundamentos de Ingeniera del Software

INTRODUCCIN AL

MODELO VISTA - CONTROLADOR


Vicente Garca Daz
garciavicente@uniovi.es

Vicente Garca Daz


Csar Fernndez Acebal
Juan Manuel Cueva Lovelle
Escuela de Ingeniera Informtica
Universidad de Oviedo
Curso 2010-2011

Esquema bsico del MVC


2

Vista

Totalmente independientes.
Ninguno sabe de la existencia
del otro

Capa de presentacin

Controlador

Modelo

Capa de negocio y de
acceso a datos

El Controlador es el nico que sabe


cmo funciona la Vista y el Modelo

Cul es la clave para lograrlo?


3

Los patrones de diseo


El MVC es un patrn de diseo compuesto
Patrn de diseo Strategy

El controlador implementa diferentes estrategias

Patrn de diseo Observer

El controlador, y a veces, la vista observan continuamente al


modelo

Patrn de diseo Composite

La vista suele implementar dicho patrn internamente para


facilitar el trabajo de mostrar la interfaz

Otros patrones como Adapter, Command o Facede

tambin tienen cabida con MVC


Para esta introduccin no ser necesario
conocer estos patronesaunque es muy
recomendable, sobre todo el Observer

Ejemplo de empleo del MVC


4

Aplicacin Java muy sencilla realizada con Swing

Aqu nos dice en qu


emisora estamos
Retroceso de emisora

Avance de emisora

Cuando se enciende la radio, se puede


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

Proyecto JAVA
5

Lanzamiento del programa


Controlador

Controlador
Interfaz para que el Controlador pueda observar
Es un enumerado que indica al
Controlador qu ha cambiado del modelo

Modelo

Interfaz para que el Modelo pueda ser observado

Modelo
Vista

Vista (creada con Swing)


El Controlador observa al Modelo.
Para ello utilizaremos el patrn de
diseo Observer. Es la clave de MVC!

El lanzamiento del programa


6

Slo 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 podra ser mucho ms


sofisticado. Por ejemplo, podran
incluirse parmetros de configuracin
o una instancia del Model0 que se
utilizar

El modelo
IObservable.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.

notifyObserver sirve para que el Modelo


notifique a todos los elementos que lo
estn 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)

As, cualquier objeto que haya implementa


la interfaz IObserver puede ser el
parmetro que se le pasa al mtodo

En este caso, se utiliza un enumerado


UpdateInfo con diferentes valores en
funcin de qu ha ocurrido

El modelo
Model.java (1/2)
8

Tpico constructor
Se aaden observadores

Sigue en la siguiente diapositiva

Cuando se invoca este


mtodo, se avisa (notifica) a
todos los observadores de
algn cambio importante en
el Modelo

El modelo
Model.java (2/2)
9

Cuando se enciende la radio, el


Modelo busca 8 emisoras de radio
y las guarda en su memoria.
Adems 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 lmite de 8, se vuelve a la
primera. Luego, notifica a sus
observadores
Anlogo 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 vista
View.java (1/2)
10

El Vista guarda una referencia al


Controlador. Muy importante porque la
Vista delega al Controlador la
responsabilidad de ejecutar los mtodos
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 diseo
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 mtodos para
utilizar los elementos de la interfaz
Cmo se usan dichos elementos? Eso
es responsabilidad del Controlador
Sigue en la siguiente diapositiva

La vista
View.java (2/2)
11

Se delega al Controlador
la responsabilidad de
invocar el mtodo
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,
slo 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 controlador
IObserver.java
12

La clase Controller implementa esta interfaz El Controlador es un OBSERVADOR

update es el mtodo que se llama para cada uno de los observadores


cuando el Modelo invoca al mtodo 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 controlador
UpdateInfo.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 ms significativos (podran ser otros cambios en lugar de los 3 del
ejemplo)

El controlador
Controller.java (1/2)

El Controlador es el nico que


conoce a la Vista y al Modelo

14

Muy importante!!

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. Adems,
no habra que tocar ni la Vista, ni
el Modelo, componentes ms
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 funcin de
los mtodos que le ofrezca la
Vista

El controlador
Controller.java (2/2)
15

En este caso, el trabajo del Controlador es


muy sencillo. Cuando la Vista invoca a un
mtodo del Controlador, ste nicamente
tiene que invocar al mtodo de igual
nombre del Modelo. Sin embargo, en la
prctica no siempre ser as. Es muy normal
que el Controlador haga algn tipo de
procesamiento aunque sea pequeo
Por ejemplo, la Vista le podra pasar al
Controlador la orden SubirVolumen. Si el
Modelo tuviera un nivel de volumen desde 0
hasta 100, el Controlador podra, por
ejemplo, invocar un mtodo del Modelo
como SubirVolumen(5), indicando que
cuando la Vista pide SubirVolumen, el
Modelo debe hacerlo de 5 en 5 unidades

Capacidad de adaptacin del MVC


16

El MVC tiene mltiples implementaciones. Algunas:


.NET ASP.NET MVC
JAVA Spring MVC

http://mvc.asp.net
http://www.springsource.org/

PHP Zend Framework


Ruby Ruby on Rails

Permite adaptaciones

http://framework.zend.com/
http://rubyonrails.org/
Al igual que todos los
patrones de diseo

Habra que utilizar interfaces, no implementaciones


El modelo podra ser un parmetro del controlador

La vista observa directamente al modelo


La vista accede directamente a algn getter del modelo
Empleo de mltiples controladores para subsistemas
etc

Bibliografa
17

También podría gustarte