¿Qué es MVC? Lo que deberías saber acerca de este patrón de arquitectura de software
Tags: software, programming, mvc, modelovistacontrolador
Published: 2021-01-20 15:03:59

Si estas en el mundo del desarrollo de software, especialmente en el **desarrollo web** de seguro has escuchado este término y si no tienes claro de que se trata no te preocupes aquí te voy a explicar algunos puntos que te ayudaran a comprenderlo. Empecemos.

Cuando creamos una aplicación debemos tener en cuenta aspectos más allá que solo programar, de inicio a fin existen muchos detalles importantes, al inicio, uno de ellos es **definir la estructura que tendrá nuestra aplicación**, aquí definimos aspectos que facilitará el resto del ciclo de desarrollo hasta el mantenimiento, aquí entra el concepto de Arquitectura de Software.

Dentro de la Arquitectura de Software entra el término: patrón de arquitectura de software. Este es el que define la estructura de un sistema (hablaremos de ello en otro post) y **MVC** es uno de ellos, a continuación hablaremos de él.
**El patrón MVC** tiene sus inicios en los años 70, fue pensado para aplicaciones de escritorio, pero se popularizo gracias a la aparición de la web y por su puesto de las aplicaciones web, fue la base de muchos patrones que existen en la actualidad.

 ![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/z3n1we2ubf5z18zdzbif.png)

Pero, ¿Qué es realmente?
**MVC** parte de las iniciales de **M** de **Modelo**, **V** de **Vista** y **C** de **Controlador**, es decir hace referencia a la manera que se estructura una aplicación. 

Podemos decir que la parte de **interacción con el usuario** (es la vista), el que hace **posible que nuestra petición sea respondida** (es el controlador, este se encarga de comunicar al modelo con la vista), **los datos que solicitamos** o los que ingresamos para ser almacenados (es el modelo), pero todo esto en resumen. 
 
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/a1qgitc273kursg3gf81.png)

Ahora vamos a definir cada una:
**MODELO:** Representa la lógica de los datos, define estos datos para luego utilizarlos, manipularlos como con un CRUD(create, read, update and delete o en español crear, leer, actualizar y eliminar) y/o para validaciones. Este modelo no debe saber nada de la interfaz gráfica, es independiente, es decir el modelo no tiene por qué saber si es una app web o una app móvil, su única responsabilidad es la **lógica y reglas del negocio**. Se crea para definir la información que vamos a utilizar, si en nuestra aplicación vamos a manejar usuarios, un modelo podría ser el modelo usuarios.

**VISTA:** tiene todos los elementos visibles al usuario, lo que podemos ver en pantalla, básicamente es la **interfaz**, lo que el usuario final ve, contiene elementos gráficos como botones, imágenes, formularios, textos necesarios para que el usuario pueda interactuar con nuestro sistema. La vista se comunica con el controlador para poder acceder a los datos, detrás de la interfaz, puede tener htlm, css, javascript, razor etc. 
La vista puede tener lógica de vista mas no de negocios, la vista no debe saber nada de la lógica de la aplicación es decir del modelo.  

**CONTROLADOR:** es el **intermediario** entre el Modelo y la Vista, es el encargado que exista comunicación entre los dos componentes, toma los datos pedidos en la vista o las peticiones realizadas por el usuario, posteriormente interacciona con el modelo y decide que datos va a mostrar en la vista o que le devuelve al cliente según petición que realizó, aquí esta la parte inteligente de la aplicación.  
Recibe métodos hppt => get, post, put, delete, pero los más populares son GET y POST.

MVC es el patrón más conocido en la web. 
En conclusión, MVC es un patrón para desarrollar aplicaciones que están bien diseñadas, comprobables y fáciles de mantener por la forma clara en la que separamos la estructura del proyecto, es decir por el **desacoplamiento entre los componentes de la aplicación**. Es un buen patrón para utilizar si trabajamos con aplicaciones web.

Para más contenido sígueme en [Twitter](https://twitter.com/veronicaguamann) e [Instagram](https://www.instagram.com/veronicaguamann/)