Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Confuso Modelo Vista Controlador
Confuso Modelo Vista Controlador
Fuentes de confusin
A lo largo del presente TFC se han consultado mltiples fuentes sobre el patrn Modelo-VistaControlador: [Ree home] [Mic 1] [Kon 04] [Sun 02] [Bur 92] [Pan 03] [Sund 96] [Sund 98]
[Wikipedia] [Moo 05] [Oktaba]. Estas fuentes estn en un rango de fechas muy amplio,
teniendo en cuenta la juventud de la informtica, y van desde los primeros ejemplos de sistemas
interactivos de Trygve Reenskaug en el ao 1973, hasta una presentacin del mismo autor en
abril de 2006, pasando por diversos autores que incluso crean sus propias
versiones del patrn.
El Modelo-Vista-Controlador se cre para Smalltalk a finales de los setenta. A partir de entonces
su uso se ha ido extendiendo cada da ms para la construccin de sistemas software con
interfaz grfica. Su enorme uso ha provocado que haya tambin multitud de referencias al
patrn Modelo-Vista-Controlador, que en muchas ocasiones son fuentes de confusin porque se
utilizan distintos contextos de aplicacin para el patrn, se tratan de conseguir objetivos
distintos, los nombres de los componentes del patrn son los mismos
pero con diferentes responsabilidades, los diagramas de clases y de secuencia son tambin
diferentes. Adems, hay referencias donde se dan ejemplos de implementacin del patrn con
sus particularidades, ya que la mayora de los entornos de desarrollo de aplicaciones, sobre todo
de aplicaciones web, dan facilidades para implementar el patrn Modelo-Vista-Controlador. A
veces esto no es del todo bueno, ya que realmente no implementan de forma correcta la esencia
del patrn y confunden an ms al lector, que utiliza estas implementaciones como ejemplo para
aprender a usar el patrn Modelo-Vista-Controlador.
A continuacin se citan distintas fuentes que son contradictorias o que muestran diferentes
interpretaciones del patrn Modelo-Vista-Controlador porque:
Dan los mismos nombres a los componentes pero les conceden distintas
responsabilidades.
Fuente 1
Cre el patrn Modelo-Vista-Controlador como una solucin obvia al problema general de dar
al usuario el control sobre su informacin, vista desde diferentes perspectivas []
[]Un aspecto importante del MVC original es que su Controlador era responsable de crear y
coordinar sus vistas. Tambin, en mis implementaciones posteriores del MVC, una vista acepta
y maneja las entradas del usuario que se refieren a ella. El Controlador acepta y maneja las
entradas referentes al conjunto Controlador/Vista, llamado ahora Herramienta
[...]El propsito esencial del MVC es reducir la distancia entre el modelo mental del usuario y el
modelo computacional que existe en el ordenador. La solucin ideal del MVC le proporciona al
usuario la ilusin de que est viendo y manipulando la informacin del dominio directamente.
La estructura es til si el usuario necesita ver el mismo elemento del modelo simultneamente
en diferentes contextos y/o desde diferentes puntos de vista. La figura 10.1 ilustra esta idea''
[MVCweb]
Fuente 2
``Cuando se construyen aplicaciones interactivas, como con otros programas, la modularidad de
componentes tiene enormes beneficios. Aislar las unidades funcionales unas de otras tanto como
sea posible hace ms fcil para el diseador de la aplicacin entender y modificar cada unidad
particular, sin tener que saber todo sobre las otras unidades. [...]
[...]La metfora Modelo-Vista-Controlador es una forma de disear e implementar aplicaciones
software interactivas que aprovecha la ventaja de la modularidad, para ayudar al desarrollo
conceptual de las aplicaciones, y para permitir que las piezas ya desarrolladas para una
aplicacin sean reutilizadas en una nueva aplicacin.
La metfora impone una separacin de comportamientos entre el modelo real del dominio de la
aplicacin, las vistas usadas para mostrar el estado del modelo y la edicin o control del modelo
y las vistas.'' [KrPo88]]
Esta referencia es tambin importante, porque ha sido la referencia ms antigua al
Modelo-Vista-Controlador durante mucho tiempo, hasta que Trygve Reenskaug public
sus artculos de finales de los setenta. En la mayora de los trabajos sobre el ModeloVista-Controlador aparece esta referencia.
El punto de vista que se muestra aqu se centra en la reutilizacin de los componentes y
en la facilidad para conectar nuevos componentes de interfaz sin afectar al modelo. Esta
es la idea que ms predomina hoy en da en cuanto al uso del patrn Modelo-VistaControlador. Pero sin embargo tambin tiene en cuenta la idea inicial de Reenskaug, ya
que habla del desarrollo conceptual de las aplicaciones. La figura 10.2 es la que se
presenta en esta fuente para mostrar los componentes del Modelo-Vista-Controlador y
sus relaciones. Esta es la nica fuente que muestra una simetra en el comportamiento
del modelo con respecto a las vistas y el controlador. Ante un cambio en su estado, el
modelo avisa de este cambio tanto a la vista como al modelo. En el resto de fuentes que
se han consultado, el modelo simplemente avisa a la vista y no al controlador. Esto hace
que el modelo sea algo ms mecnico, sistemtico, no hace distinciones entre el modelo
y la vista, cuando cambia avisa a todos y al que le afecte el cambio ser el que tenga que
buscar los datos accediendo al modelo.
Fuente 3
``El propsito de muchos sistemas informticos es recabar informacin de un almacn de datos
y mostrarlos al usuario. Despus de que el usuario cambie los datos, el sistema guarda las
actualizaciones en el almacn de datos. Como el principal flujo de informacin es entre el
almacn de datos y la interfaz de usuario, alguien se puede ver tentado a juntar ambas partes
para reducir la cantidad de cdigo y mejorar el rendimiento de la aplicacin. Sin embargo, este
enfoque, aparentemente natural, tiene algunos problemas significativos. Un problema es que la
interfaz de usuario suele cambiar ms frecuentemente que el sistema de almacenamiento de
datos. Otro problema con el acoplamiento de las partes de datos y de la interfaz de usuario es
que las aplicaciones corporativas suelen incorporar lgica de negocio que va ms all de la
transmisin de datos.
Cmo se puede modularizar la funcionalidad de la interfaz de usuario de una aplicacin web
para que se puedan modificar de forma sencilla las partes?
El patrn de diseo Modelo-Vista-Controlador es fundamental para la separacin de la lgica de
la interfaz de usuario de la lgica de negocio. Desafortunadamente, la popularidad del patrn ha
dado como resultado bastantes descripciones errneas. En particular, el trmino ``controlador''
ha sido usado para referirse a diferentes cosas en diferentes contextos. Afortunadamente, la
llegada de las aplicaciones web ha ayudado a resolver parte de esta ambigedad, ya que la
separacin entre la vista y el controlador es ms evidente.'' [MVC]
Microsoft contina en la misma lnea que Krasner y Pope en su trabajo [KrPo88] donde
vieron el potencial que poda ofrecer la metfora Modelo-Vista-Controlador propuesta
Fuente 4
``El patrn MVC resuelve el problema de actualizacin de las vistas de una aplicacin (ventanas
de la interfaz de usuario) cuando cambian sus datos. [...]
[...]La vista contiene la interfaz grfica de usuario, que es la parte de la aplicacin que puede ver
el usuario. Cuando el usuario modifica los datos en la pantalla se inicia una accin, esa accin
va al controlador. El controlador determina qu tipo de accin ha sido solicitada y llama a las
interfaces apropiadas del modelo. El modelo puede estar compuesto de varios componentes,
clases o paquetes, dependiendo de la tecnologa que implemente la lgica de negocio de la
aplicacin.'' [Kontio-04]
Este trabajo centra su inters en el uso del patrn Modelo-Vista-Controlador como una
forma de mantener la coherencia en una interfaz de usuario que est compuesta por
varias vistas. La figura 10.4 muestra los elementos del patrn Modelo-VistaControlador. En este caso, el controlador acta como elemento de entrada y la vista
como salida. Adems el modelo slo notifica sus cambios a la vista, que se ha registrado
como observador del modelo, pero no se indica cmo la vista conoce la informacin del
estado que debe actualizar ante el cambio en el modelo.
Este trabajo est en sintona con la idea de Reenskaug, se trata de facilitar al usuario el
trabajar con mucha informacin y desde distintos puntos de vista, haciendo que ante un
cambio todo sea coherente. Pero en ningn momento habla sobre los modelos mentales,
se centra en el problema concreto de la actualizacin de todas las vistas ante un cambio
en el mismo modelo.
Fuente 5
``MVC es particularmente apropiada para aplicaciones web interactivas, aplicaciones donde un
usuario web interacciona con un sitio web, con mltiples interacciones de las pantallas que
muestra y mltiples peticiones de muestreo de datos.'' [Sun-02]
Este trabajo se centra en las facilidades que aporta el patrn MVC a la construccin de
aplicaciones web. En la figura 10.5 se puede observar que, al contrario que en la fuente
anterior, es la vista la que recibe las entradas del usuario, y las pasa al controlador que
provoca un cambio de estado en el modelo en funcin de la entrada del usuario que le
pasa la vista. Cuando el modelo cambia se lo notifica slo a la vista, que en este caso s
que accede al modelo para pedir la informacin del estado que debe actualizar. El
controlador elije la vista que se debe mostrar para cada operacin que realiza el usuario.
Este trabajo tambin est en la lnea de pensamiento del autor original, ya que se centra en la
presentacin de los datos en mltiples vistas. Tambin hace hincapi en la necesidad de
mantener estas vistas sincronizadas, que es algo a lo que Reenskaug no hace referencia en sus
primeros artculos.
Fuente 8
``La arquitectura Modelo/Vista/Controlador fue diseada para reducir el esfuerzo de
programacin que se requiere para construir sistemas que hagan uso de mltiples y
sincronizadas presentaciones de los mismos datos. Sus caractersticas principales son que el
modelo, los controladores y las vistas se tratan como entidades separadas y que los cambios que
se hacen sobre el modelo deberan reflejarse automticamente en cada una de las vistas.''
[Sundsted-96]
Se hace pensar al lector que por el hecho de separar en tres objetos diferentes la
aplicacin el esfuerzo de crear la aplicacin es menor. Cuando lo que en realidad se
consigue con el patrn Modelo-Vista-Controlador es facilitar los cambios de una
aplicacin ya construida, y no por el hecho de que est separada en los tres
componentes del patrn, sino porque esos componentes estn relacionados de forma que
facilitan los cambios en la interfaz. El autor con entidades separadas quiere hacer
entender que son entidades independientes? Como se ha venido explicando a lo largo de
este trabajo, la separacin no produce independencia.
En la figura 10.7 se muestran una serie de controladores y vistas que pertenecen al
mismo modelo, pero no aporta ninguna informacin ms, no se sabe la relacin entre
cada uno de ellos y si las dependencias estn sin flechas, en UML, significa que las
relaciones son en ambos sentidos, lo que no facilitara los cambios en la aplicacin. Este
diagrama ofrece muy poca informacin del modelo, y slo la ofrece a nivel de
organizacin y no de comportamiento. No se puede ver en la figura quin recibe la
entrada y cmo se comunican los componentes de la arquitectura en el flujo de una
accin concreta.
Fuente 9
``Mientras que el patrn de diseo MVC se usa tpicamente para la construccin de interfaces
de usuario completas [...]
[...]El patrn de diseo MVC separa un componente software en tres piezas distintas: un
modelo, una vista y un controlador.'' [Sundsted-98]
Este trabajo utiliza el Modelo-Vista-Controlador como herramienta para crear
interfaces, pero sin darse cuenta lo que adems le proporciona, la facilidad de cambio en
esas interfaces. Sin embargo, para el autor ese no es el objetivo, el objetivo es construir
las interfaces.
La figura 10.8 muestra la separacin de los tres componentes y que entre ellos existen
relaciones. Pero estas relaciones no se especifican, y con este diagrama no se puede
intuir un posible funcionamiento de los componentes del patrn. Partir una aplicacin
en trozos sin ms no implica mejorar la calidad del software, el ``divide y vencers'' no
es siempre funciona.
Fuente 10
``Modelo Vista Controlador (MVC) es un patrn de arquitectura de software que separa los
datos de una aplicacin, la interfaz de usuario, y la lgica de control en tres componentes
distintos. El patrn MVC se ve frecuentemente en aplicaciones web, donde la vista es la pgina
HTML y el cdigo que provee de datos dinmicos a la pgina.
Es comn pensar que una aplicacin tiene tres capas principales: presentacin (IU), dominio, y
acceso a datos. En MVC, la capa de presentacin est partida en controlador y vista. La
principal separacin es entre presentacin y dominio; la separacin entre V/C es menos clara.
Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo que sigue el control
generalmente es el siguiente:
1. El usuario interacta con la interfaz de usuario de alguna forma (por ejemplo, el usuario
pulsa un botn, enlace)
2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificacin de la
accin solicitada por el usuario. El controlador gestiona el evento que llega,
frecuentemente a travs de un gestor de eventos (handler) o callback.
3. El controlador accede al modelo, actualizndolo, posiblemente modificndolo de forma
adecuada a la accin solicitada por el usuario (por ejemplo, el controlador actualiza el
carro de la compra del usuario). Los controladores complejos estn a menudo
estructurados usando un patrn de comando que encapsula las acciones y simplifica su
extensin.
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 (por ejemplo, produce un listado del
contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre
la vista. Sin embargo, el patrn de observador puede ser utilizado para proveer cierta
indireccin entre el modelo y la vista, permitiendo al modelo notificar a los interesados
de cualquier cambio. Un objeto vista puede registrarse con el modelo y esperar a los
cambios, pero aun as el modelo en s mismo sigue sin saber nada de la vista. El
controlador no pasa objetos de dominio (el modelo) a la vista aunque puede dar la orden
a la vista para que se actualice. Nota: En algunas implementaciones la vista no tiene
acceso directo al modelo, dejando que el controlador enve los datos del modelo a la
vista.
5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo
nuevamente.'' [Wikipedia]
Como en casi todas las referencias, lo primero que se menciona es la separacin en tres
componentes. Esta afirmacin no aporta nada, ya se ha demostrado que separar no implica
mejorar el software.
Se trata sobre la capa de acceso a datos, diciendo que el Modelo-Vista-Controlador no trata
este tema. Que no lo trate hace que sea ambiguo, que puede adoptar distintas soluciones
para esa capa de acceso a datos, porque eso no es lo esencial del Modelo-Vista-Controlador,
es una peculiaridad que no aporta nada al significado de la metfora.
Se reconoce la diversidad de implementaciones del patrn Modelo-Vista-Controlador, y
como en algunos casos los componentes tienen distintas formas de relacionarse o distintas
responsabilidades que llevar a cabo, y se da una variante en la que no queda muy claro si la
vista recibe las peticiones y se las pasa al controlador o las recibe el controlador, parece que
el controlador es la entrada, pero el ltimo punto donde dice que la interfaz espera nuevas
interacciones puede crear dudas en el lector.
Se utiliza una frase que se ha visto tambin a lo largo de este Trabajo Fin de Carrera como
es ``proveer cierta indireccin entre el modelo y la vista''. Se utiliza esta frase para explicar
el uso del patrn observador, como complemento del Modelo-Vista-Controlador, que se
utiliza para implementar el mtodo de aviso del modelo a las vistas. Qu significa
indireccin entre el modelo y la vista? No se querr decir que crea relaciones ambiguas? Al
fin y al cabo se busca una forma de que el modelo avise a las vistas sin que se relacione con
ellas de forma unvoca, porque el objetivo es que el modelo sea independiente de las vistas,
o como mnimo, que las vistas le sean indiferentes. As se lograr que los cambios de la
interfaz no se propaguen al ncleo del sistema, lo que facilitar los cambios en la interfaz
porque habr que modificar menos clases. Las relaciones ambiguas son un concepto que se
puede definir en un universo con incertidumbre, sin embargo, cmo se define indireccin
entre dos componentes?
Fuente 11
``Es muy frecuente que se solicite cambio a interfaz. Los cambios a interfaz deberan ser fciles
y efectuados en tiempo de ejecucin. El cambio de interfaz no debera de tener consecuencias
para el ncleo del cdigo de la aplicacin.
Solucin: el sistema se divide en tres partes: procesamiento, entradas y salidas.
Controlador: est asociado a cada vista, recibe entradas que traduce en invocaciones de
mtodos del Modelo o de Vista. El usuario interacta con el sistema solamente va
controladores.'' [Oktaba]
Este trabajo busca aislar el modelo de los cambios en la interfaz del usuario, de esta forma
se facilitaran los cambios de la interfaz, que cambia frecuentemente. Es la misma lnea de
pensamiento que mantiene Microsoft.
Pero al lector, se le da una solucin, que no est justificada, y que debe creerse sin tener
ninguna base terica por detrs que la respalde. El lector puede llegar a pensar que el
``divide y vencers'' soluciona el problema, y esto no es cierto como se ha venido
demostrando a lo largo de este trabajo.
Resumiendo
Ante este amplio abanico de referencias, donde se muestran los diferentes puntos de vista de los
autores que han estudiado el Modelo-Vista-Controlador, convendra hacer un resumen, ya que,
en realidad hay puntos comunes. Las ideas fundamentales en las que se basa el Modelo-VistaControlador podran simplificarse en dos: reducir la distancia humano-mquina y facilitar los
cambios de la interfaz de usuario.
En la lnea de la primera idea, estaran los autores que utilizan el Modelo-Vista-Controlador
para dar soporte a un modelo con mltiples vistas, los que tienen como objetivo mantener la
coherencia entre las distintas vistas de un mismo modelo, o los que pretenden sintonizar el
modelo mental del usuario con el software.
En sintona con la segunda idea, estaran los autores que buscan facilitar la modificacin de los
sistemas, los que tratan de mejorar la reutilizacin de componentes, o los que buscan la
programacin concurrente de componentes.
Ambas ideas estn relacionadas, porque para poder reducir la distancia humano-mquina, habr
que realizar mltiples pruebas de forma que el usuario y el programador sintonicen sus ideas.
De esta forma, la aplicacin ser ms cercana al modelo mental del usuario. Pero para realizar
estas pruebas, se necesita que los cambios en la interfaz de usuario sean rpidos y cmodos. Ah
est la relacin entre las dos ideas, y por eso el Modelo-Vista-Controlador resuelve ambos
problemas.
El Modelo-Vista-Controlador de Reenskaug
Trygve Reenskaug es el creador del patrn Modelo-Vista-Controlador. Durante su estancia en
Xerox Parc entre 1978 y 1979 desarroll las ideas en las que se basa el patrn conocido hoy en
da, y sus ideas se usaron para implementar el Modelo-Vista-Controlador en Smalltalk-80.
El objetivo fundamental que persegua Reenskaug era reducir la distancia entre el modelo
mental del usuario y el modelo computacional. La figura 10.9 muestra esta idea. Quiere hacer
creer al usuario que ve y manipula la informacin del dominio directamente. La estructura que
crea es til, desde su punto de vista, cuando los usuarios necesitan ver el mismo elemento del
modelo de forma simultnea desde diferentes puntos de vista o contextos.
Para lograr este objetivo de acercar lo que se implementa en el software al modelo mental que
tiene el usuario de lo que est utilizando en una aplicacin, Reenskaug propone la divisin en
varios componentes de la aplicacin.
Cosa-Modelo-Vista-Editor
En una primera versin, en Mayo de 1979, Reenskaug define tres elementos: modelo, vista y
editor.
Reconoce al modelo como una implementacin de una abstraccin que es de inters para el
usuario. Es decir, el modelo representa en el computador, el modelo mental del usuario, y lo
consigue mediante una coleccin de datos que estn junto con los mtodos necesarios para
procesar esos datos. Esta forma de implementar el modelo, vista en la actualidad recuerda a los
objetos, donde los datos y los mtodos que trabajan con esos datos forman un objeto. A finales
de los setenta estaba comenzando el estudio de los objetos y esta idea parece estar presente en el
documento de Reenskaug, aunque quiz referida a los tipos abstractos de datos, que fueron un
paso intermedio entre el modelo estructurado y el orientado a objetos. Adems, Reenskaug
reconoce la imposibilidad de crear modelos totalmente consistentes, y aboga por modelos
``menos exactos'' y ms factibles de lograr. Esta idea puede interpretarse como un alejamiento
del pensamiento estructurado de la poca donde se crea que aplicando un mtodo se poda
alcanzar la perfeccin en el software. Reenskaug subraya la importancia de que el modelo debe
ser una representacin limpia de la abstraccin utilizada, sin tener ningn tipo de informacin
sobre la presentacin en la pantalla de la informacin.
La vista es el componente capaz de mostrar una o ms representaciones grficas del modelo y
puede tambin, ejecutar operaciones sobre el modelo. Cada vista estar asociada a un modelo,
que podr, a su vez, tener ms vistas asociadas. Esto es lgico, ya que Reenskaug quera
conseguir representar el mismo dato desde diferentes puntos de vista, para que el usuario tuviera
un mayor control de su informacin.
El editor es una interfaz entre el usuario y una o ms vistas. Sirve para proporcionar al usuario
las operaciones que puede realizar sobre el modelo, por ejemplo con mens dinmicos que se
adaptan al contexto. Para Reenskaug, una tarea se realiza mejor con varias vistas en la pantalla
al mismo tiempo, y el usuario querr trabajar con ellas a la vez. El editor debe crear un conjunto
de vistas, colocarlas en la pantalla, coordinarlas y proporcionar al usuario una interfaz
apropiada.
Modelos-Vistas-Controladores
En diciembre de 1979, Reenskaug introduce el trmino controlador y da una nueva definicin
para los trminos modelo, vista y editor, que sigue estando presente.
Sobre el modelo dice que representa conocimiento y que no es muy interesante que sea un nico
objeto, por lo tanto, el modelo puede ser una estructura de objetos. Adems, Reenskaug propone
que debera existir una correspondencia entre el modelo y el mundo que se percibe. Esta idea, es
muy tpica en el modelo orientado a objetos, ya que se tiende a creer, que copiar la realidad
facilita conseguir un software de mayor calidad. [Incertidumbre] trata la problemtica de copiar
la realidad en el software, donde se explica porque no siempre esta poltica es la ms
beneficiosa.
La vista est asociada a un modelo y es su representacin visual. Para conseguir los datos que
debe mostrar, la vista debe obtenerlos preguntndole al modelo. Adems, la vista tambin puede
actualizar el modelo. La vista por lo tanto depender del modelo, porque tiene que mandarle
mensajes para comunicarse con l.
El nuevo componente, el controlador, es el enlace entre un usuario y el sistema. Es el encargado
de proporcionar al usuario una forma para que ejecute sus operaciones. Una vez que el
controlador recibe las instrucciones del usuario se lo notifica a las vistas. Reenskaug deja bien
claro que el nico componente que puede recibir instrucciones del usuario es el controlador.
Tambin se especifica que un controlador puede manejar ms de una vista.
Un editor es, para Reenskaug, un controlador especial que proporcionan algunas de las vistas.
Permite al usuario modificar la informacin que se presenta en las vistas, acta como una
extensin del controlador. Se podra ver al editor como la parte del controlador que modifica las
vistas, mientras que el controlador slo recibe peticiones del usuario que redirige a las vistas.
Hay ciertos aspectos que Reenskaug no deja del todo claros, y que por lo tanto, pueden ser
interpretados desde diferentes puntos de vista. En ningn momento dice que el controlador o el
editor ordena cambios en el modelo, slo habla de que la vista puede hacer modificaciones en el
modelo. Habr lectores que sobreentiendan que el controlador es el que modifica el modelo,
pero Reenskaug, slo dice que el controlador avisa a las vistas de las entradas del usuario. Sin
embargo en la figura 10.9 se muestra la situacin opuesta a lo que describe en sus artculos. El
usuario parece que interacciona directamente con la vista, y es el controlador el que modifica el
modelo.
El Modelo-Vista-Controlador de Microsoft
Microsoft trata el patrn Modelo-Vista-Controlador en un artculo que pertenece a una
coleccin donde se tratan los patrones de diseo de aplicaciones web.
El problema que se plantea resolver Microsoft en su artculo es cmo modularizar la
funcionalidad de la interfaz de usuario de una aplicacin web de forma que se puedan modificar
de forma sencilla las partes individuales.
Microsoft se plantea un contexto donde la interfaz de usuario cambia de una forma ms habitual
que la lgica de negocio de la aplicacin. Por eso se quiere lograr facilitar los cambios en la
interfaz de usuario, porque facilitando este tipo de cambios se conseguir facilitar la
modificabilidad del sistema en general, ya que estos cambios son los ms frecuentes.
Se consideran una serie de motivaciones que aconsejan utilizar el patrn Modelo-VistaControlador como solucin al problema planteado en el contexto que se presenta. La interfaz
cambia ms a menudo que la lgica de negocio, si se tiene en un mismo objeto a las dos partes,
ser ms difcil aislar a la lgica de negocio de posibles equivocaciones en el cdigo cuando no
era necesario modificar su cdigo. Cuando se cambian los datos de una vista, el resto de vistas
debe actualizarse automticamente. Se necesitan perfiles de programadores distintos para la
parte de la interfaz y de la lgica de negocio. La interfaz tiene las responsabilidades de mostrar
la informacin al usuario y de enviar a la lgica de negocio las peticiones de actualizacin que
realiza el usuario. Hay que facilitar la migracin de la interfaz a otras tecnologas y reducir el
Esto es lo que Microsoft llama la variante del modelo pasivo. En esta situacin el controlador es
el que efecta los cambios de estado en el modelo y avisa a las vistas para que se actualicen. Las
vistas accedern al modelo para consultar el nuevo estado que deben mostrar al usuario. La
figura 10.11 muestra el diagrama de secuencia que ilustra una operacin en el modelo solicitada
por el usuario y la correspondiente actualizacin de la vista.
Figura 10.12: Uso del Observador para desacoplar el modelo de las vistas en el modelo activo
El uso del patrn Modelo-Vista-Controlador, segn Microsoft aporta los siguientes beneficios:
mejora la testeabilidad del sistema, soporta mltiples vistas de un mismo modelo y facilita los
cambios, todo ello gracias a la separacin de los tres componentes. En esto se equivoca
Microsoft ya que la separacin no es la que provoca los beneficios del patrn, se ver que son el
tipo de relaciones entre los componentes lo que permitir que el software sea fcilmente
modificable.
Por otro lado, Microsoft advierte que el uso del Modelo-Vista-Controlador aumenta la
complejidad de la solucin y que si la frecuencia de cambio del estado del modelo es muy alta,
puede provocar distintos problemas de funcionamiento de la aplicacin.
Mitos
A lo largo de este Trabajo Fin de Carrera se ha observado, como en muchas de las referencias
sobre el Modelo-Vista-Controlador que se han consultado, la explicacin que se da a las
soluciones aportadas se basa en la utilizacin de mitos. Mitos muy extendidos en el mundo de la
informtica que se quieren aclarar en este trabajo.
organizarla, lo que producir a lo mejor alguna que otra divisin o separacin. La separacin es
una condicin necesaria para lograr independencia entre dos partes, pero no es una condicin
suficiente. El hecho de tener dos partes separadas no hace que automticamente sean
independientes entre s. Para conseguir que dos partes sean independiente no debe haber
relaciones entre ellas. Pero en una aplicacin los objetos deben colaborar para llevar a cabo
tareas complejas, que por s mismos no pueden realizar. Por lo tanto, aunque se debe minimizar
el nmero de dependencias entre componentes a la hora de crear aplicaciones, es inevitable y
necesario que existan dependencias. Las relaciones entre componentes software son
direccionales y de dos tipos, unvocas y ambiguas. Se intentarn crear, siempre que sea posible,
relaciones ambiguas, que facilitan los cambios en el software.
Se dice que la relacin de la clase A hacia la clase B es unvoca, si al cambiar la clase B por la
clase B', la clase A debe cambiarse por A'. La figura 10.14 muestra una relacin unvoca de la
clase A hacia la clase B. Este tipo de relacin dificulta los cambios en el software, ya que ante
un cambio en la clase B, la clase A se ve afectada. El cambio de B se propaga hacia A y obliga a
modificar tambin la clase A. El mbito del cambio es mayor, ya que hay ms clases implicadas
en cada cambio, esto provoca que realizar cambios en la clase B sea ms difcil, lento y costoso,
con lo que se dificulta la modificabilidad del sistema.
Se dice que la relacin de la clase A hacia la clase B es ambigua, si al cambiar la clase B por la
clase B', la clase A no necesita cambiar. La figura 10.15 representa una relacin ambigua o
indiferente de la clase A hacia la clase B. Este tipo de relacin facilita los cambios en la
aplicacin porque al no propagarse los cambios se acota el mbito de los cambios de B a la
clase B. Los cambios son ms sencillos y rpidos de realizar, lo que reduce el coste de
mantenimiento. Se podra modificar, o incluso sustituir, la clase B sin que la clase A tenga que
cambiar. Se facilita por lo tanto la modificabilidad de la aplicacin.
Decir que modularizar una aplicacin es beneficioso porque facilita los cambios es falso.
Modularizar es partir en mdulos, y eso no asegura independencia ni indiferencia. La
indiferencia se consigue mediante el uso de relaciones ambiguas. Por lo tanto, para facilitar la
modificabilidad hay que buscar independencia e indiferencia, cosas que no se consiguen con
slo modularizar la aplicacin. Un ejemplo se muestra en la figura 10.16, donde los
componentes son los mismos que en el Modelo-Vista-Controlador. Sin embargo, el modelo
depende de la vista, as que, ante un cambio en la vista, el modelo se ver afectado y deber
modificarse. Esto demuestra, que modularizar slo no basta, hay que organizar los componentes
y sus relaciones de forma que se pueda conseguir independencia o indiferencia en el sentido
correcto. No es lo mismo que el modelo dependa de la vista, a que la vista dependa del modelo.
situacin que no es real, ya que los componentes estn relacionados. Ante un cambio en uno de
los componentes no se facilita la modificabilidad por el hecho de dividir, luego la complejidad
por incertidumbre no se est reduciendo.
Se puede ver un ejemplo de divide y vencers en la figura 10.17, donde para un conjunto de 6
elementos relacionados entre s, se proponen dos modularizaciones distintas.
La segunda opcin se muestra en la figura 10.19, donde se han dividido los componentes de
acuerdo a la lnea de divisin diagonal de la figura 10.17. Esta segunda opcin es an peor,
porque tampoco se pueden manejar las dos partes de forma independiente, y adems ahora, el
nmero de relaciones entre estas dos partes es mayor. Ahora, ante cualquier cambio en cualquier
componente de una u otra parte, esos cambios afectarn a las dos partes
Se puede ver en estas figuras que la complejidad descriptiva ha disminuido, ya que ahora hay
slo dos componentes frente a los 6 que haba en la situacin inicial. Sin embargo, esto no
permite que puedan ser tratados de forma independiente los dos componentes. Las relaciones
existentes entre ellos no facilitan los cambios, por lo que la complejidad por incertidumbre no se
ha reducido. Reducir esta complejidad ser el objetivo para conseguir que los cambios en una
parte no se propaguen a otras.
El ``divide y vencers'' ignora las relaciones entre las partes en que divide el problema. En un
universo no aditivo, la suma de las partes no es el todo, y por lo tanto el ``divide y vencers'' no
funciona. El espacio de soluciones donde se contemplan las dos dimensiones de complejidad, la
descriptiva y la de incertidumbre, puede ser un espacio no aditivo, y por lo tanto, no es seguro
que el ``divide y vencers'' funcione.
El problema con este trmino es que existe la premisa en el mundo de la informtica de que para
que una aplicacin sea fcilmente modificable el acoplamiento debe ser bajo, y eso no es cierto.
Como se ha visto, el trmino acoplamiento tiene diferentes significados, y para reducir un
acoplamiento hay que aumentar otro, por lo tanto qu acoplamiento hay que bajar para que la
aplicacin sea modificable? El grado de acoplamiento no es til como herramienta para medir
las propiedades del software.
Solucin
En la informtica, durante muchos aos ha predominado el pensamiento estructurado, que tiene
sus orgenes en el mtodo cartesiano. Esta gran influencia en el pensamiento ha hecho
extenderse la idea de que la incertidumbre en el software es erradicable. La incertidumbre est
presente en el software a travs de las abstracciones, como pueden ser las variables, las
funciones,... Adems, se est comprobando que los requisitos cambian a lo largo de los
proyectos, lo que va en contra del pensamiento estructurado que requiere unos requisitos
completos, exactos, estables, ... para as poder erradicar la incertidumbre.
Adems, se puede ver como un espacio de soluciones donde slo se contempla la complejidad
descriptiva no es capaz de resolver el problema del Modelo-Vista-Controlador. Los autores se
enredan con la utilizacin de mitos y de frases como dependencias directas, indirectas, ... Para
conseguir encontrar una solucin hay que introducir una nueva dimensin en este espacio de
soluciones. Hay que considerar la complejidad por incertidumbre, a partir de esta ampliacin en
el espacio de soluciones se podr dar una solucin al Modelo-Vista-Controlador.
Debido a estos motivos, es necesario introducir ambigedad en la solucin. De esta forma se
podr manejar la incertidumbre que existe en el software y se encontrar una solucin al
Modelo-Vista-Controlador. El uso de la ambigedad disminuir la complejidad por
incertidumbre, aunque eso s, no de forma gratuita. A cambio, la complejidad descriptiva puede
aumentar. Pero sin el uso de la ambigedad, habr problemas que no se podrn resolver ya que
buscarn solucin a su problema en un espacio terico ms limitado.
Aclarando el Modelo-Vista-Controlador
A partir de la solucin propuesta de considerar las dos dimensiones de la complejidad, la
descriptiva y la de incertidumbre, el Modelo-Vista-Controlador puede inventarse a partir de qu
es lo que se quiere y cmo se quiere conseguir. Lo que se quiere es facilitar los cambios en la
interfaz de usuario de una aplicacin, y para conseguirlo hay que aplicar la ambigedad como
instrumento de diseo.
Figura 10.22: Cambio de las dependencias para independizar la clase inicial de la entrada y la salida
De la misma manera puede ser interesante o necesario que la clase A avise a Leer. Si por
ejemplo, ante un cambio en su estado, la clase A necesita que se le pida un carcter al usuario,
deber avisar a la clase Leer para que ese dato puede solicitarse. Mediante una relacin ambigua
tambin, A avisa a Leer con un mensaje del tipo ``lee'', como se muestra en la figura 10.24.
Por ltimo, otra posibilidad, es que ante una lectura errnea o con algn tipo de incidente, la
clase Leer deba avisar a Imprimir para que se imprima un cdigo de error o una advertencia al
usuario que est introduciendo los datos. Est relacin no es ambigua ya que la clase Leer le
deber pasar a Imprimir los datos necesarios para la impresin, ya que en esta ocasin la clase A
no es consciente del dato que se ha recibido, ya que Leer acta como filtro de errores. Esta
situacin se muestra en la figura 10.25.
Figura 10.25: La clase inicial avisa a la entrada y la salida y la entrada informa a la salida de un error sintctico