En esta lección, exploraremos el patrón MVC (Modelo-Vista-Controlador), clave para construir aplicaciones web organizadas y fáciles de mantener.
Imagina que tu sitio web crece y empiezas a manejar formularios, usuarios y bases de datos. El código se vuelve un caos, ¿verdad? El patrón MVC te ayuda a organizarlo todo. Vamos a entenderlo paso a paso, como si te lo explicara un amigo con experiencia.
¿Qué es MVC?
MVC es una forma de organizar el código de una aplicación. Sus siglas significan:
- Model (Modelo)
- View (Vista)
- Controller (Controlador)
Cada una de estas partes cumple una función específica dentro del manejo de un flujo típico en una app: cuando un usuario hace una solicitud (por ejemplo, entra a una página), la aplicación procesa esa solicitud y responde con algo (como un HTML).
Este flujo se conoce como:
solicitud ➡️ procesamiento ➡️ respuesta.
Con MVC, ese procesamiento se separa en tres partes claramente definidas para que el código no se vuelva desordenado.
Componentes de MVC
Modelo (Model)
El modelo contiene las reglas del negocio y puede tomar decisiones lógicas. Por ejemplo, si estás haciendo una app de contabilidad, las reglas que definen cómo se calcula un balance deben estar en el modelo, no en el resto del código.
⏬ Código de ejemplo (modelo usando Python y SQLAlchemy):
```python
# models.py
from sqlalchemy import Column, Integer, String
from your_project.database import Base
class Usuario(Base):
__tablename__ = 'usuarios'
id = Column(Integer, primary_key=True)
nombre = Column(String)
correo = Column(String)
def saludar(self):
return f"Hola, soy {self.nombre}"
```
En este ejemplo, tenemos una clase Usuario como modelo. Además de tener atributos, puede tener métodos con lógica, como saludar.
📘 Lectura recomendada: Rails is not your application
2. Vista (View)
Aquí se usan lenguajes o motores de plantillas, como Jinja2 (en Flask), que permiten mostrar datos de manera dinámica.
⏬ Código de ejemplo (vista con Jinja2):
<!-- templates/perfil.html -->
<h1>Perfil de {{ usuario.nombre }}</h1>
<p>Correo: {{ usuario.correo }}</p>
Aquí estamos mostrando un HTML donde se usa una plantilla con variables. El contenido se llena con los datos recibidos (en este caso, un usuario).
Por ejemplo, si hay que cortar una cadena larga a 100 caracteres, eso debería hacerse en el controlador o el modelo, y no en la vista.
Controlador (Controller)
Es como un coordinador: llama al modelo si necesita datos, y luego pasa esa información a la vista para generar la respuesta.
⏬ Código de ejemplo (controlador en Flask):
# routes.py
from flask import render_template
from models import Usuario
@app.route('/perfil/<int:id>')
def perfil(id):
usuario = Usuario.query.get(id)
# Aquí se llama la vista y se le pasa el modelo como contexto
return render_template('perfil.html', usuario=usuario)
Este controlador recibe una solicitud a la ruta /perfil/<id>, obtiene el usuario correspondiente del modelo y muestra la vista de perfil.
En frameworks más grandes, los controladores suelen ser clases y sus métodos se llaman "acciones".
Relación entre los componentes
En el patrón MVC, los componentes tienen relaciones claras:
| Columna 1 | Columna 2 |
|---|---|
| Modelo ➡️ | No conoce a nadie. Vive en su mundo. |
| Vista ➡️ | Conoce los datos que debe mostrar. |
| Controlador ➡️ | Conoce al modelo y a la vista, y los hace trabajar juntos. |
El controlador actúa como intermediario. El modelo no sabe que hay un controlador o una vista que lo usa.
Flujo general de MVC
- El usuario hace una solicitud, por ejemplo, entra a
/perfil/5. - El controlador recibe la solicitud y decide qué hacer.
- El controlador usa el modelo para conseguir los datos.
- El controlador pasa esos datos a la vista.
- La vista genera algo para mostrar (HTML, JSON, etc.).
- El usuario recibe la respuesta.
Resumen
- MVC es un patrón de arquitectura que organiza el código en tres partes: Modelo, Vista y Controlador.
- El modelo contiene la lógica de negocio y representa la información.
- La vista se encarga de mostrar los datos, sin lógica compleja.
- El controlador recibe las solicitudes y coordina la comunicación entre modelo y vista.
- Separar el código en estos tres componentes ayuda a mantener el sistema escalable y claro.
- La vista no debe contener reglas de negocio ni lógica del sistema.
- El modelo no depende del framework ni de la vista: solo contiene lógica propia del dominio.
Este patrón está presente en frameworks populares como Flask, Django, Laravel (PHP), Ruby on Rails y muchos más. Entender MVC te va a ayudar a desarrollar aplicaciones web más ordenadas y escalables.
Materiales adicionales
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.