Logo de Torre de Babel
Portada Libros Diseño web Artículos Glosario RSS
Buscar

El patrón arquitectónico MVC

El patrón arquitectónico MVC (Model-View-Controller) es, en la actualidad, un estándar muy asentado para el desarrollo de sistemas software que precisan interactuar con personas y que, por tanto, entre sus componentes existe una interfaz de usuario. Todo ingeniero de software conoce este patrón y en la red es posible encontrar infinidad de artículos explicándolo. En esta breve entrada solamente se ofrece una visión histórica del mismo y, sobre todo, se destacan las ventajas que aporta al desarrollo de aplicaciones.

Cómo surge el patrón MVC

El primer documento en que se habla de la separación de los elementos de un sistema software en un modelo de ordenador, un software controlador y una vista manipulable por el usuario surge en los Xerox PARC (Palo Alto Research Center) en 1978 en The original MVC reports, mencionándose un componen adicional, llamado Editor, que forma parte de la vista.

Durante el desarrollo de una aplicación (por parte de un científico visitante que pasaba una temporada en el PARC) se hizo patente la necesidad de buscar una solución general al problema que planteaba el control de un conjunto de datos grande y complejo por parte de un usuario. El objetivo era adaptar el modelo de ordenador de esos datos al modelo mental de la persona que debía usarlos, interponiendo los componentes software apropiados para ello.

La aplicación a desarrollar era un sistema de planificación y en él se empleaban cuatro metáforas: thing, model, view y editor, extrapolación del objeto de interés para el usuario, la abstracción de ese objeto en forma de datos en un ordenador, una o más posibles representaciones de dicho objeto y la interfaz entre el usuario y esas vistas, respectivamente.

Tras un proceso de refinamiento se definió el modelo como una representación del conocimiento con el que debe trabajar el sistema, la vista como una representación visual de ese modelo y se introduce el controlador como el enlace entre el usuario y el sistema. Estas ideas se plasman en un documento publicado el 10 de diciembre de 1979 con el título Model-Views-Controllers, naciendo el acrónimo MVC.

La primera implementación de MVC como patrón arquitectónico, más allá de la aplicación puntual que le dio origen, se efectuó en el propio PARC para la librería Smalltalk-80. A partir de ese momento comenzó su popularización y se extendió su uso, con independencia de plataformas, lenguajes de programación e incluso arquitectura del sistema a desarrollar.

Beneficios que aporta MVC al diseño de sistemas software

Es necesario partir de la base de que este patrón es aplicable exclusivamente a sistemas software en los que se precisa interacción por parte del usuario, no teniendo sentido fuera de dicho contexto.

Un mismo sistema puede contar con múltiples vistas, dependiendo por ejemplo del tipo de usuario que lo utiliza. Una aplicación bancaria, por poner un ejemplo, ofrece una vista especializada al cliente que accede a través de la Web desde su ordenador, distinta de la que obtiene el trabajador que atiende físicamente en la oficina a los clientes. El sistema es el mismo, pero las vistas obviamente no.

Además las vistas suelen evolucionar con el tiempo, adaptándose a los nuevos toolkit de los sistemas operativos, a nuevos dispositivos como los teléfonos móviles o sencillamente adaptándose a nuevas necesidades. En contraposición, el modelo interno del sistema suele mantenerse estable a lo largo del tiempo y raramente cambia una vez concluida la fase de desarrollo. Podría decirse que el modelo es la esencia invariable del sistema y es la plasmación del conocimiento que se tiene del dominio en una estructura interpretable por un ordenador.

Diseñar (y especialmente mantener) un sistema en el que unos componentes cambian dinámicamente durante la ejecución y/o a lo largo del tiempo y deben comunicarse con otros invariables representa una cierta dificultad. En este contexto el patrón MVC facilita el desacoplamiento de dichos componentes, de forma que es posible cambiar de vista con gran sencillez sin necesidad de alterar en ningún sentido el modelo.

Para que el modelo pueda permanecer inmutable a lo largo del tiempo es indispensable que esté completamente desconectado del mundo exterior, es decir, el modelo no tiene conocimiento alguno sobre la vista ni acerca del controlador. Esto se consigue principalmente mediante la aplicación de dos patrones software bien conocidos: el patrón estrategia y el patrón observador.

El patrón observador permite al modelo notificar hacia el exterior los cambios que se produzcan en el estado del sistema, pero sin conocer detalle alguno sobre el componente al que está notificando. Esto hace posible que el controlador y la vista reciban mensajes desde el modelo sin que éste cuente con un conocimiento explícito sobre aquellos.

Aunque la arquitectura MVC no lo establece explícitamente, el desacoplamiento entre el modelo y los demás componentes del sistema se incrementa si estos últimos tampoco tienen un conocimiento directo del primero, para lo cual se recurre al citado patrón estrategia. Lo que controlador y vista tienen es una interfaz de acceso al modelo, no una referencia directa a los objetos que lo componen.

Cabe preguntarse, si el modelo no tiene conocimiento de vista ni controlador y éstos no conocen directamente el modelo, ¿cómo es posible que el sistema opere como un todo? Por convención cuando el sistema se pone en marcha crea el controlador y deja en sus manos la creación del modelo y la vista o vistas que pudieran existir, estableciendo las conexiones adecuadas entre ellos.

En resumen, el patrón arquitectónico MVC favorece el diseño de sistemas software en base a componentes que tienen una alta cohesión: únicamente el modelo gestiona el estado del sistema, solamente la vista genera representaciones visuales de dicho estado etc.; y mantienen un elevado grado de desacoplamiento, haciendo posible la modificación e incluso sustitución de cualquiera de ellos sin afectar al resto. Todo ello contribuye a simplificar el diseño de aplicaciones complejas que, de otra forma, resultarían mucho más difíciles de abordar y mantener.


Publicado el 9/2/2011

Recopilación de twits sobre tecnología: enero 2011

A continuación una selección de los twits sobre tecnología en @fcharte del pasado mes de enero:

  • 1-Ene: Curioso anuncio de AT&T 1993 que adelanta la existencia en el futuro del GPS, los Tablet tipo iPad y otros dispositivos: http://ow.ly/3wLvK
  • 1-Ene: Manual del primer módulo de gráficos en color para un ordenador personal desarrollado por Cromenco en 1976 para el Altair http://ow.ly/3wLkM
  • 1-Ene: RT @wanlinksniper: The Computer Tree - comp-tree.png http://ff.im/-w8bYF
  • 1-Ene: Tal día como hoy de 1983 ARPANET completó la transición del protocolo NCP al TCP, naciendo técnicamente Internet http://ow.ly/3wLhX
  • 2-Ene: Con el parche en el ojo: Historia de la piratería "casera" http://ow.ly/3x2B0
  • 2-Ene: Un día como hoy de 1975, en una carta de Gates y Allen a MITS, se utiliza por primera vez el nombre "Microsoft" http://ow.ly/3wXQE
  • 4-Ene: Así se anunciaba en una revista española el #Commodore VIC-20, ordenador que estos días cumple 30 añitos de nada http://ow.ly/i/6XOv
  • 4-Ene: El Commodore VIC-20 presentado en el Winter CES de 1981 cumple 30 años. Un par de anuncios de la época http://ow.ly/3xQLG http://ow.ly/3xQNX
  • 4-Ene: Hoy cumple 31 años el HP-85 ordenador con 16KB RAM, CRT de 5", unidad de cinta e impresora: http://ow.ly/3xQs0 Costaba 3250$, unos 8500$ hoy
  • 4-Ene: Revolution: The First 2000 years of Computing. The Computer History Museum. http://www.youtube.com/user/ComputerHistory
  • 4-Ene: RT @spectrumgomas: WebGL Inspector: a #WebGL debugger for Chrome and Firefox http://bit.ly/fQf1Br
  • 4-Ene: Un día como hoy d 1968 IBM lanza el System/360, heredero del famoso 1400 y uno de los primeros en contar con multiproceso http://ow.ly/3xQpR
  • 5-Ene: El mismo día y en el mismo evento #Commodore presenta el Commodore 128 http://en.wikipedia.org/wiki/Commodore_128
  • 5-Ene: Tal día como hoy de 1984 Richard Stallman fundó el #GNU Project http://en.wikipedia.org/wiki/GNU_Project Semilla de la #FSF
  • 5-Ene: Un día como hoy de 1985, en el Winter CES, #Atari lanza las líneas de microordenadores XE y ST http://en.wikipedia.org/wiki/Atari_ST
  • 6-Ene: Tal día como hoy de 1983 #Apple presenta en el Winter CES el Lisa: http://en.wikipedia.org/wiki/Apple_Lisa
  • 7-Ene: 7 de enero de 1982 se presenta en el CES el ordenador más vendido de la historia (según record Guinnes): el #Commodore 64 http://ow.ly/3zO4T
  • 7-Ene: 7/Ene/1982 Simultáneamente #Commodore lanzó el Ultimax o Commodore MAX, una máquina pensada para el mercado japonés http://ow.ly/3zO6X
  • 7-Ene: Al parecer los drivers CUDA para Linux tienen un fallo que afecta a la seguridad permitiendo leer datos de otros usuarios http://ow.ly/3AaZn
  • 7-Ene: Tal día como hoy de 1954 #IBM hace la primera demostración de una traducción hecha por una máquina, totalmente automática http://ow.ly/3zO0s
  • 7-Ene: Un día como hoy de 1963 Ivan Sutherland muestra Sketchpad programa revolucionario para la manipulación directa de objetos http://ow.ly/3zO21
  • 8-Ene: 8/Ene/1889: Conceden a Herman Hollerit las 3 primeras patentes relacionadas con la informática por su Tabulating Machine: http://ow.ly/3AnEG
  • 8-Ene: 8/Ene/1979 Atari registra la patente "Data Processing System with Programmable Graphics Generator" http://ow.ly/3AnIO base del Atari 400/800
  • 8-Ene: En #Linux hay vida más allá de #Ubuntu. Recopilación de 15 distribuciones Linux con características interesantes: http://ow.ly/3Aseh
  • 8-Ene: En el CES se han presentado multitud de tablets. En http://ow.ly/3Ao30 resumen características de 7 de ellos.
  • 8-Ene: Un día como hoy de 1940 comienza a funcionar el "Bell Labs Complex Computer" diseñado por George Stibitz: http://ow.ly/3AnG7
  • 9-Ene: Curioso anuncio de 1968 en ABC del "factor/contafac", único ordenador electrónico fabricado en España hasta ese momento http://ow.ly/3AI2u
  • 9-Ene: El Factor-P, 1er ordenador fabricado en España, en "El enigma del ordenador Del ábaco a Internet" http://ow.ly/3AJJC Incluye noticia y vídeo
  • 9-Ene: Hoy se cumplen 25 años del lanzamiento del #Atari 1040ST, ordenador que ocupó la portada de BYTE en marzo de ese año http://ow.ly/i/75n2
  • 12-Ene: "Es razonable suponer que pronto habrá chips con grandes cantidades de memoria, digamos 16KB" Bishop/Jones/Wells en Electronics&Power 1978
  • 12-Ene: #GPU Computing Ushers in Progress http://is.gd/kBMZ8? La computación de propósito general en GPU (#GPGPU) cada más común en sistemas HPC
  • 12-Ene: 12/Ene/1984 #Sinclair anuncia el QL, con micro 68008 y 128KB de RAM. 1er ordenador con CPU de 32 bits, antes que Apple: http://is.gd/kBpTB
  • 12-Ene: Acabo d encontrar en el sótano este artículo que escribí para Diario Ideal en 1987 http://yfrog.com/h2zlbvlj ¡Hace 24 años! No está completo
  • 12-Ene: DOM Monster: bookmarklet que permite obtener un análisis resumido y recomendaciones de la página abierta en el navegador: http://is.gd/kBJP8
  • 12-Ene: Fallo de seguridad en el kernel de las versiones 9.10, 10.04 y 10.10 de [K|Ed|X]Ubuntu: http://www.net-security.org/advisory.php?id=12563
  • 13-Ene: #Apache ha lanzado una nueva versión de la base de datos distribuida Cassandra (liberada por Facebook en 2008): http://cassandra.apache.org
  • 13-Ene: El #W3C acaba de publicar una revisión del documento "HTML5 differences from HTML4": http://dev.w3.org/html5/html4-differences #HTML5
  • 13-Ene: IBM Watson: 2880 procesadores, 15 teras de RAM, NLP y técnicas de AI para competir en Jeopardy como una persona: http://is.gd/wlXMjl
  • 13-Ene: No conocía http://dosdose.com. Usando Java crea una máquina virtual DOS en el navegador para ejecutar juegos antiguos, no hay más que elegir
  • 13-Ene: Se inaugura en el Computer History Museum la exposición "R:Evolution - 2.000 años de computación". Galería fotográfica: http://is.gd/Bpqs8s
  • 13-Ene: Tal día como hoy de 1984 Jack Tramiel http://is.gd/PtnSPr dimite como CEO y director de #Commodore, poco después comprará #Atari
  • 13-Ene: Un día como hoy de 1988 Ashton-Tate (creadores de dBase: http://is.gd/z8vhEu) y #Microsoft anuncian SQL Server, una variante de Sybase
  • 14-Ene: El confundador de Atari, Allan Alcorn, habla sobre la creación del mítico juego Pong y la industria de los vídeojuegos: http://is.gd/mJyozg
  • 14-Ene: La "Computer Conservation Society" invertirá 350.000$ en 3 años para reconstruir el EDSAC (ordenador de 1949): http://is.gd/S3enXH
  • 15-Ene: #Python 3.2 - Resumen de novedades importantes recién salido del horno: http://is.gd/z61xfQ
  • 15-Ene: 15/Ene/1984: Jobs y Gates rescinden el contrato que limitaba la entrada de MS en el desarrollo de software no Apple: http://is.gd/xjtSC5
  • 15-Ene: Building great browsers together: http://is.gd/Ky1otk Sobre #HTML5 Canvas e interoperabilidad
  • 15-Ene: El 15 de enero de 1968 Ralph Baer registra la famosa patente '480 y se convierte en el padre de los vídeojuegos: http://is.gd/kLbDkL
  • 15-Ene: GPU Computing - to exascale and beyond - NVIDIA : http://is.gd/Iwbjfs
  • 15-Ene: La evolución de las #GPU para computación de propósito general: http://is.gd/o6dl3b Interesante recorrido histórico de GPU/GPGPU - GTC10
  • 15-Ene: Precio de la memoria en enero de 1976 (hace 35 años) http://yfrog.com/h3378ukj Teniendo en cuenta la inflacción acumulada,serían 2.600$ hoy
  • 16-Ene: El AN/FSQ-7 ocupaba 2.000m² y pesaba 275 ton. Su fabricación supuso el 10% de ingresos de IBM y lanzó a la empresa en el campo informático.
  • 16-Ene: El AN/FSQ-7 sigue ostentando el record de ser el ordenador más grande fabricado nunca: http://is.gd/E0ttau
  • 16-Ene: IBM desarrolló el ordenador AN/FSQ-7 http://is.gd/lH8h1x, con válvulas de vacío y memorias de ferrita, como núcleo de SAGE, fabricando 52 ud
  • 16-Ene: La Fundación #Apache libera la primera versión estable de #Tomcat en la rama 7.x: http://is.gd/kzIHGi Hora de decir adiós a Tomcat 5.5/6.0
  • 16-Ene: Un día como hoy de 1956 se anuncia en rueda de prensa la existencia de SAGE, la primera red de ordenadores a gran escala http://is.gd/Jj9VDt
  • 17-Ene: Científicos de la Universidad de Hertfordshire ultiman prototipo de robot capaz de aprender a expresar emociones: http://is.gd/7FsUZP
  • 19-Ene: Un día como hoy de 1983 se presenta el primer ordenador personal con GUI, el #Apple Lisa: http://is.gd/IH8NVd M68000, 5MB RAM, 2 disqueteras
  • 21-Ene: ¿Aplicaciones COBOL en la nube sobre Windows Azure? Sí, con Visual Cobol de Microfocus: http://is.gd/LOrveS Esta empresa es dueña de Borland
  • 21-Ene: http://www.bitsavers.org/pdf - Miles de documentos históricos, desde manuales del Apple I y Altair 8800 hasta grandes máquinas de IBM y DEC
  • 21-Ene: Científicos canadienses, japoneses, británicos y alemanes publican en Nature varios avances hacia el ordenador cuántico: http://is.gd/wEihYy
  • 21-Ene: El #W3C actualizará #HTML5 indefinidamente sin cambiar el número de versión, no habrá un HTML 6, 7 ... http://is.gd/EI8s5j
  • 21-Ene: Nuevas especificaciones de las API OpenMAX y OpenSL de manos del Khronos Group: http://is.gd/MdVjbH
  • 21-Ene: Un día como hoy de 1986 se lanza el IBM RT PC (RISC PC), una Workstation que, por su nombre, causó confusión y fracasó: http://is.gd/cR4r8U
  • 22-Ene: Entrevista en 1985 a Steve Jobs tras su forzada salida de Apple. Realmente quedó muy tocado, pero se recuperó rápido: http://is.gd/S5wj2s
  • 23-Ene: En formato mobi (#Kindle). ¡Imprescindibles! RT @wanlinksniper: 50 eBooks compiled from top StackOverflow topics/answers http://ff.im/-wHwSb
  • 23-Ene: IBM looks back on 100 years of history, finds plenty to be proud of (video) http://is.gd/Z9uV2e
  • 24-Ene: AMD lanza nuevos drivers de GPU para #Windows y #Linux con soporte mejorado para #OpenCL y también con #OpenGL 4.1: http://is.gd/qhbh4C
  • 24-Ene: Resumen de las novedades para desarrolladores web presentadas por #Microsoft: http://is.gd/Kb6qzj WebMatrix, ASP.NET MVC 3, IIS 7.5 Express
  • 24-Ene: Tal día como hoy de 1984 #Apple lanza el #Macintosh: M68000 a 7.93MHz, 128KB, discos de 3.5":, pantalla 9" y 2500$: http://is.gd/XYvg1P
  • 27-Ene: Tal día como hoy en 1972 Magnavox comienza a fabricar la Odyssey, la 1ª consola de vídeo juegos doméstica de la historia: http://ow.ly/3L3wT
  • 27-Ene: Un día como hoy de 1948 se presenta el IBM SSEC, primer ordenador con programa almacenado. Más información en http://fcharte.com
  • 29-Ene: Disponible Portable #LibreOffice 3.3, compatible con Microsoft Office, libre y que puedes llevarte en una memoria USB: http://is.gd/nPBVRb
  • 29-Ene: El #W3C publica el borrador "Touch Events Specification" que servirá como estándar Web para pantallas multi-táctiles: http://is.gd/SrFm3E
  • 29-Ene: Galería de imágenes en la que se resumen las novedades de #Android 3.0 (Honeycomb): http://is.gd/2ynHlt
  • 29-Ene: Interesante: cómo resolver el problema del TSP (viajante del comercio) con la herramienta Solver de Excel: http://is.gd/vvL56t
  • 29-Ene: Lanzado Turnkey #Linux 11 http://is.gd/k6mciT 45 imágenes preconfig de #Ubuntu para fines concretos instalables directamente o como VMs
  • 29-Ene: Un día como hoy de 1992 se inicia la famosa discusión entre Torvalds y Tanenbaum sobre la obsolescendia de #Linux: http://is.gd/OLZmKw
  • 30-Ene: Un día como hoy de 1952 se descubren por primera vez nuevos números primos usando un ordenador, el SWAC: http://is.gd/6YChbH
  • 31-Ene: Ya está disponible el AMD APP SDK, kit de desarrollo #GPGPU para las nuevas APU de AMD, con soporte #OpenCL 1.1: http://is.gd/tMGJLF

Publicado el 2/2/2011

Curso de shaders

Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web