El patrón de diseño MTV en Django y su relación con el MVC

- Andrés Cruz

In english
El patrón de diseño MTV en Django y su relación con el MVC

Antes de comenzar a programar vamos a hablar un poco sobre estas piezas de software conocidas como framework.

¿Qué es un Framework?

Un framework es conjunto de componentes fácilmente reutilizables, escalables y de relativamente fácil mantenimiento, lo grandioso de esto, es que cuando nosotros desarrollamos una aplicación siempre hay estructuras que se repiten a lo largo del ciclo de desarrollo; por ejemplo:

  • Conexión a la base de datos
  • Módulo de usuarios (Registrarse, iniciar, sesión, cerrar sesión)
  • Panel de administración o gestión de datos
  • Formularios y carga de archivos
  • Entre otros

Y estos componentes pueden ser reutilizados en la mayoría de las aplicaciones hoy en día, que en términos generales son en base a CRUDs, quitando algunas operaciones según el módulo que estemos trabajando, por ejemplo:

Si tenemos un listado de tareas, perfectamente aplicamos un proceso CRUD para gestionar el mismo; pero si tenemos un listado de Post que queremos presentar al usuario, es decir, un blog de cara a nuestro usuario final, solamente nos preocupamos por el proceso de leer.
Por supuesto, todos estos tienen formas de ser vistas por nuestro usuario (Capa de Vista) y administradas a nivel de los datos (Capa de Controlador y Modelo) y aquí lo interesante de implementar patrones para hacer aplicaciones modulares, y escalables en el tiempo, y aquí entra el MVC y sus variaciones como el MTV.

Conociendo el patrón MVC

Lo primero que vamos a hablar es que es un patrón; un patrón simplemente es son un conjunto de técnicas para resolver problemas comunes; y nuestro MVC es un patrón y ahora vamos a hablar qué significan cada una de sus siglas.

Modelo Vista Controlador (MVC)

  1. M significa “Model” (Modelo), la cual es la capa que nos ofrece la conexión a la base de datos manejada como un objeto (ORM) a través del framework; esta capa se encarga de la la comunicación e interacción con la base de datos.
  2. V significa “View” (Vista), la capa que se encarga de presentar los datos a nuestro usuario (Frontend); y estos datos generalmente son los obtenidos desde la base de datos gracias a la capa anterior, que son pasados a la misma (a la Vista) tras previo proceso del controlador.
  3. C significa “Controller”(Controlador), la capa en donde pasaremos la mayor parte de nuestro tiempo Backend (lógica de negocio), esta capa es el intermediario (Middleware) que se encarga de recibir la solicitud de nuestro cliente (mediante una URL o ruta) y hacer, sea lo que sea que esté destinada a hacer; que generalmente consiste en obtener los datos de nuestra base de datos mediante el modelo, procesar la misma, y asignar la vista y pasarle los datos a la misma.

MTV vs MVC

Ahora que ya sabemos que es un framework que en muy reducidas palabras seria un kit o conjunto de herramientas con componentes reutilizables y modificables; también hablamos sobre qué es un patrón y cómo funciona el patrón MVC, vamos a hablar cómo está compuesto frameworks como Django.

Si vienes de PHP como lo soy yo, sabrás que los framework más populares como lo son CodeIgniter y Laravel trabajar con el MVC, es decir, el Modelo Vista Controlador aunque cada uno de ellos son ciertas modificaciones en el mismo.

Lo ideal de emplear estos patrones al momento de desarrollar nuestras aplicaciones, es que cada capa es independiente de la otra y tenemos una separación entre cada una de las capas.

Django y su variación del MVC clásico

Django implementa este patrón MVC de una manera peculiar y con algunas variaciones que ellos llaman MTV, que viene siendo la de Model, Template, View.

Pero tiene una equivalencia prácticamente de uno a uno con el MVC en un cambio más de interceptación que de otra cosa; el M, V y C se separan en Django de la siguiente forma:

  1. M, la M de Modelo viene quedando igual, que viene siendo la capa de acceso a la base de datos.
  2. V, la capa que especifica qué datos vamos a mostrar y define la presentación de los datos a nuestro usuario, la única diferencia es que Django las vistas de nuestro MVC se conocen como Template, por lo tanto pasamos de la V a la T...
  3. C, la capa que se encarga de conectar el Modelo con la Vista, esta capa en Django se podría decir que es manejada (o al menos en parte) por el propio framework; ya que es Django que se encarga de manejar el ruteo o el manejo de las rutas (interceptar la petición de nuestro cliente y destinar al "Controlador") la cual especifica que ruta va a llamar a que función en nuestro proyecto en Django URLConf, y por tal motivo, tenemos otro tipo de capas que simplemente le llaman "View".

Así que en resumen:

  1. M significa “Model” (Modelo), donde sigue siendo, la capa que se encarga de comunicar e interactuar con la base de datos.
  2. T significa “Template” (Plantilla),  en este caso la plantilla cumple la función de nuestra vista, y es la que empleamos para mostrar los datos de nuestro usuario, generalmente la página HTML.
  3. V significa “View” (Vista), la “C” en el patrón de diseño MTV, es la capa que se encarga de manejar la lógica de negocios, a través de la que pasarán los datos del modelo a la plantilla.

Para comparar con otros framework como lo son Laravel o CodeIgniter 4, también tiene otra "capa" que se encarga de manejar el ruteo de la aplicación, en CodeIgniter 3, también existe este mecanismo pero es completamente opcional y podemos relacionar de uno a uno un controlador con una URL.

Por lo tanto hay una combinación de nombres algo problemática entre el nombrado del MVC y su variación de MTV, en la interpretación de la gente de Django la "vista"
que viene siendo similar al Controlador, la Vista de Django (el controlador en el MVC) describe los datos que son presentados al usuario; no necesariamente el cómo se mostrarán, pero sí cuáles datos son presentados. 

Por aquí te dejo un enlace a la documentación oficial en donde podrás obtener algo más de detalles sobre el framework.
 

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.