Está en la página 1de 10

The Model View Controller

Architecture
Rubby Casallas G.
Departamento de Sistemas y Computación
Facultad de Ingeniería
Universidad de los Andes
2003

Objetivos

• El objetivo de esta presentación es:


– Entender en detalle qué es el modelo MVC
– Entender cómo construir un software con interfaz
gráfica e interactiva usando el modelo MVC
– Entender el patrón Observer/Observable
– Utilizar el modelo MVC en el desarrollo de una
aplicación en java.

Rubby Casallas Copyright 2003 2

1
Referencias

• Buchmann F., Meunier, R., Rohnert, H.,


Sommerlad , P: Stal, M. A System of Patterns.
West Sussexx, England, Wiley and Son. 1996

• Gamma E., Helm R. , Johnson R., Vlissides, J.


Design Patterns. Elements of Reusable
Object-Oriented Software. Addison-Wesley.
1995

Rubby Casallas Copyright 2003 3

Agenda

• Objetivos
• Referencias
• La arquitectura
– Responsabilidades del modelo
– Responsabilidades de las vistas
– Responsabilidades de lso controladores
• MVC y java
• Ejemplo

Rubby Casallas Copyright 2003 4

2
La arquitectura MVC

• Divide la aplicación en tres partes:


– El Modelo encapsula la lógica de la aplicación
– Las Vistas muestran la información al usuario (distintas
perspectivas)
– El controlador maneja la interacción con el usuario

• Un mecanismo de propagación de actualizaciones


garantiza la Ala consistencia entre la información del
modelo y la información que ve el usuario en las
vistas.
• Las vistas y los controladores son observadores del
modelo.

Rubby Casallas Copyright 2003 5

Motivación para el MVC

• Permite la definición de modelos altamente


cohesivos haciendo énfasis en el dominio del
problema (la lógica del negocio) y no en la
interfase usuario

• Permite el desarrollo separado de la


aplicación y de la interfase del usuario

• Minimiza los cambios en la aplicación cuando


se realizan cambios sobre la interfase gráfica.

Rubby Casallas Copyright 2003 6

3
Motivación para el MVC (2)

• Permite la definición de múltiples vistas


sobre el mismo modelo

• Nuevas vistas pueden ser adicionadas sin


requerir NINGUN cambio en la aplicación

• El modelo puede ser portado a otra interfase

Rubby Casallas Copyright 2003 7

Responsabilidades del modelo

• Encapsula la funcionalidad de la aplicación

• Registrar sus observadores

• Notifica sus observadores cuando un cambio ocurre

• Colabora con las vistas y los controladores para que:

– El controlador pueda invocar servicios sobre el modelo


– Las vistas y los controladores tengan acceso a servicios
específicos de acceso a los datos para propósitos de
actualización.

Rubby Casallas Copyright 2003 8

4
* Observer
• Update

Model
• Application
services
• Get data
• Notify
changes

Rubby Casallas Copyright 2003 9

Observer
* • Update

View Controller
Model
• Application
services
• Get data
• Notify
changes

Rubby Casallas Copyright 2003 10

5
Responsabilidades de las vistas

• Desplegar la información al usuario


– Contiene un servicio de actualización que se activa
cuando el modelo envía una una notificación de
cambio

• Colabora con el modelo y los controladores


para:
– Obtiene los nuevos datos del modelo
– Provee a los controladores servicios de
visualización de datos

Rubby Casallas Copyright 2003 11

Responsabilidades de los Controladores

• Recibe las entradas del usuario

• Traduce los eventos del usuario en


invocaciones a los servicios ofrecidos por el
modelo

• Colabora con el modelo y las vistas para:


– El controlador debe también reaccionar a cambios
del modelo (por ejemplo, activar/desactivar
menús)

Rubby Casallas Copyright 2003 12

6
Observer
* • Update

View Controller
Model
• Application • Update • Update
services • Display • Manage events
• Get data information
• Notify
changes

Rubby Casallas Copyright 2003 13

MVC y Java

• Java Foundation Classes – Componentes


swing
– La arquitectura de los componentes Swing en java
es M-VC
– Cada componente tiene tres elementos:

• Contenido (por ejemplo el estado de un botón o el texto


dentro de un text box)
• Apariencia visual tal como color, tamaño
• Comportamiento (reacción a eventos)

Rubby Casallas Copyright 2003 14

7
Componentes Swing

JButton

ButtonModel ButtonUI
(M) (VC)

isPressed() display()
isSelected() listeners-
isEnable()

Rubby Casallas Copyright 2003 15

Mecanismo de Notificación

Fuente de eventos JButton Listener

Listener

Listener
1. Los oyentes a un evento deben
subscribirse para ser notificados
2. Cuando el evento ocurre, un método
específico (definido para el tipo de
evento) es invocado sobre cada
oyente, por ejemplo, sobre onClick se
invoca el método actionPerformed
Rubby Casallas Copyright 2003 16

8
Ejemplo- Usando Observer/Observable

Rubby Casallas Copyright 2003 17

Obervable <<interface>>
notifyObservers( ) Observer
hasChanged( ) 1..* update ()
addObserver( )
1..*

VectorObservable <<singleton>> ListViewOberver TextFieldObserver


addElement( ) SecondMVC
update () update( )

ControllerToVectorAdaptor

actionPerform( )

listener

controller view
<<interface>> TextField
ActionListener
actionPerform( ) addActionListener( )
processActionEvent( ) 18

9
: SecondMVC listView : List avgView : Text model : Vector controller : Text CM : Controller
ViewOberver FieldObserver Observable Field ToVectorAdaptor

listView = new ListViewObserver()

avgView = new TextFieldObserver()

new VectorObservable()

addObserver ( avgView)

addObserver ( listView)

controller = new TextField()

CM = new ControllerToVectorAdaptor(controller, model)

addActionListener (CM)

19

controller : Text CM : Controller model : Vector avgView : Text listView : List


Field ToVectorAdaptor Observable FieldObserver ViewOberver

actionPerform ( )

addElement ( )

hasChanged ( )

notifyObservers ( )

update (model )

getData()

update ( model)

getData()

20

10

También podría gustarte