Un patrón arquitectónico es una especie de guía que define la estructura fundamental de un sistema: es decir, los subsistemas en los que está formado y cuales son los medios y formas en las que se comunican entre ellos.

MVC

MVC es un patrón arquitectónico enfocado a la forma de presentar la información de una aplicación al usuario, así como a la forma de recibir e interpretar las acciones que este realiza sobre el programa. MVC tiene sus orígenes por ahí de 1970, sí, tiene ya bastante tiempo entre nosotros, y en cierto modo es la raíz de muchos de los patrones que existen hoy en día.

Surgió inicialmente como un patrón para la creación de aplicaciones de escritorio, sin embargo, con el tiempo (y el surgimiento de la Web) tuvo gran auge en el mundo de aplicaciones en internet y ahí fue se le reconoce más, solo para aparecer también en el desarrollo móvil

Partes

Como el nombre lo podría sugerir, el patrón se compone de tres elementos, o capas: El Modelo, la vista y el controlador. Y de acuerdo al patrón, estas tres tienen una responsabilidad bien definida cada una.

### El Modelo

El modelo es el que contiene y gestiona la información de la aplicación, también "contiene" la lógica relacionada con las reglas del negocio (o lo que nuestra aplicación debe hacer). En cierto sentido debe ser el cerebro de nuestra app.

El modelo debe saber absolutamente nada de la interfaz gráfica, y su única preocupación debe ser la de llevar a cabo todo lo que nuestra aplicación debe hacer en lo que concierne al problema que estamos buscando resolver con la app. El modelo es el encargado de conectarse con la base de datos, conectarse con servicios web y cualquier tipo de manipulación de datos en general. Idealmente el modelo debe ser algo que sea independiente de la plataforma en la que se esté ejecutando. Es decir, más allá de las limitantes del lenguaje, deberíamos poder llevar el modelo de una app para iOS a una aplicación web.

Es completamente normal que el modelo sea la mayor parte del código de tu app, sin embargo, a su vez, el modelo puede estar separado en otras capas, tal vez una de lógica de la aplicación, otra que únicamente esté diseñada para el acceso a datos y otra que se conecte con servicios web, que en MVC el modelo se presente como una sola sección de tu código, no significa que este deba ser un monolito de código espagueti imposible de separar en capas.

### La vista

La vista contiene todos los elementos que son visibles al usuario, ya sea una página web en HTML o un Storyboard en una app para iOS. Sin embargo, la vista no siempre está formada por archivos de interfaz gráfica, sino que también se pueden incluir cualquier otra herramienta que ayude a presentar los datos. Al contrario del modelo, la vista debe saber nada de la lógica de la aplicación. En teoría, su responsabilidad debe limitarse a definir la estructura, apariencia y comportamiento de los datos de la aplicación en la pantalla.

Sin embargo, te encontrarás con que muchas veces, algunas reglas del negocio aparecen en la vista en forma de validaciones, si bien esto no está definido dentro del modelo, puesto que no debería saber nada de la app, sin embargo, las validaciones (y los mensajes que estas generan, están relacionadas con los datos que el usuario metió) así que…

La vista nunca, nunca debe saber nada del modelo, y viceversa, para la comunicación entre ellos se dará a través de la última pieza de este patrón.

El controlador

El Controlador es el intermediario, este se encarga de gestionar la aplicación, estos preparan la vista con los datos traídos del modelo y se asegura que exista una comunicación entre ellos: toma las cosas que le da la vista y las transforma a algo que el modelo entienda, así mismo, toma las cosas que el modelo le da y las convierte en algo que puede ser mostrado por la vista.

En el controlador también puede ocurrir el proceso de autenticación y autorización, para decidir si un usuario tiene permiso de realizar cualquier acción que desee. Este también decide si responde a una petición de la forma en que la vista la generó, y también es el responsable de la navegación entre las vistas de una app.

Una conversación típica entre estas tres partes es algo como esto:

Vista: Oye controlador, el usuario quiere que borremos el registro 4 de la tabla alumnos. Toma la información.

Controlador: Muy bien vista, déjame ver si el usuario puede hacer esto... mmh, sí, sí puede. Oye modelo, toma, hay que borrar el registro 4 de la tabla de alumnos.

Modelo: Está bien controlador, lo hago. Bien controlador, aquí está la información devuelta.

Controlador: Gracias modelo, oye vista, toma la información nueva de los alumnos.

Vista: Oh, gracias controlador, se la muestro al usuario.

### Objetivos

El objetivo de MVC no es otro más que lograr el objetivo de la famosa separación de responsabilidades en una aplicación. En el sentido de que no es lo más saludable tener a la base de datos generando etiquetas HTML, o tener a la vista haciendo consultas SQL directamente a tu servidor de bases de datos.

Al igual que con MVVM, no existe una patrulla de MVC que vaya a multarte por no aplicar a rajatabla los principios. Sin embargo, considero que el patrón es una buena guía para cuando de desarrollar aplicaciones se trata.