Skip to content

Instantly share code, notes, and snippets.

@mathifonseca
Last active August 29, 2015 14:06
Show Gist options
  • Save mathifonseca/c90ccb1ebb3f1f4c092f to your computer and use it in GitHub Desktop.
Save mathifonseca/c90ccb1ebb3f1f4c092f to your computer and use it in GitHub Desktop.
MVC.md

#MVC = Model-View-Controller

##Contexto La interfaz de usuario es usualmente la parte más frecuentemente modificada de una aplicación interactiva. Por esta razón, es importante mantener las modificaciones a la interfaz de usuario separadas del resto del sistema. Los usuarios pueden querer ver los mismos datos desde distintas perspectivas, como en un gráfico de barras o de torta. Estas representaciones deberían reflejar el mismo estado actual de los datos.

##Problema Cómo se puede mantener la funcionalidad de interaz de usuario separada de la funcionalidad de la aplicación y aún poder responder a acciones del usuario o cambios a los datos de la aplicación? Y cómo pueden crearse, mantenerse y coordinarse las múltiples representaciones de los datos cuando estos cambien?

##Solución El patrón Model-View-Controller (MVC) separa la funcionalidad de aplicación en tres tipos de componentes:

  • Model, que contiene los datos de la aplicación, el estado de ellos y la lógica y reglas para cambiarlos
  • View, que produce una representación del modelo para el usuario o permite alguna manera de input del usuario
  • Controller, que media entre el model y la view y traduce acciones del usuario en cambios en el modelo o en la vista

MVC no es apropiado para cualquier situación. El diseño e implementación de tres tipos distintos de componentes junto con sus variadas formas de interacción puede ser costoso y puede que no tenga sentido para interfaces de usuario relativamente simples.

Pueden existir varias vistas asociadas a un modelo. Por ejemplo, un conjunto de datos administrativos puede ser representado como filas y columnas en un Excel, como una gráfica de torta o como una infografía. A su vez, el modelo puede ser cambiado por distintos controladores.

Los componentes en MVC están conectados entre sí a través de alguna forma de notificaciones, como eventos o callbacks. Un cambio en el modelo, debe ser comunicado a las vistas para que actualicen su representación. Un evento externo, como un input de usuario, debe ser comunicado al controler, que a su vez actualizará la vista y/o el modelo.

Como los componentes están ligeramente acoplados, es fácil desarrollarlos y testearlos en paralelo y cambios en uno deberían tener un impacto mínimo en el otro.

La relación entre los componentes en MVC es representada en el siguiente diagrama.

Relación entre componentes de MVC

Más información:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment