Patrón MVC: Modelo, Vista y Controlador en una tienda
El patrón MVC (Model-View-Controller, en español Modelo-Vista-Controlador) es una forma de organizar una aplicación en tres piezas con responsabilidades separadas. Para entenderlo en práctica no hace falta un proyecto enorme: puede verse con una tienda donde se consultan productos.
La estructura del proyecto
Aunque el código es pequeño, ya se nota la separación de responsabilidades:
Tienda/
├── model/
│ └── Producto.java
├── controller/
│ └── ProductoController.java
└── view/
└── ProductoView.java
Modelo (Producto.java)
El Modelo representa la información del producto. Contiene los datos y las reglas para acceder a ellos.
package model;
public class Producto {
private int id;
private String nombre;
private double precio;
public Producto(int id, String nombre, double precio) {
this.id = id;
this.nombre = nombre;
this.precio = precio;
}
public String getNombre() {
return nombre;
}
public double getPrecio() {
return precio;
}
}
Aquí puede apreciarse una idea importante: el Modelo no sabe nada de pantallas ni formularios, solo conoce los datos. En una tienda real, el Modelo podría además consultar una base de datos y devolver los productos almacenados en ella.
Vista (ProductoView.java)
La Vista se encarga de mostrar la información al usuario. No decide qué producto mostrar, solo sabe cómo presentarlo.
package view;
import model.Producto;
public class ProductoView {
public void mostrarProducto(Producto producto) {
System.out.println("Producto: " + producto.getNombre());
System.out.println("Precio: $" + producto.getPrecio());
}
}
En una aplicación real la Vista podría ser una página web o una interfaz gráfica, mientras que aquí simplemente escribe el resultado en consola.
Controlador (ProductoController.java)
El Controlador conecta el Modelo con la Vista. Es quien coordina qué información debe mostrarse.
package controller;
import model.Producto;
import view.ProductoView;
public class ProductoController {
private Producto producto;
private ProductoView vista;
public ProductoController(Producto producto, ProductoView vista) {
this.producto = producto;
this.vista = vista;
}
public void mostrarProducto() {
vista.mostrarProducto(producto);
}
}
Clase principal
Finalmente, tenemos una clase principal para probarlo:
import model.Producto;
import view.ProductoView;
import controller.ProductoController;
public class Main {
public static void main(String[] args) {
Producto producto = new Producto(
1,
"Laptop",
15000
);
ProductoView vista = new ProductoView();
ProductoController controlador =
new ProductoController(producto, vista);
controlador.mostrarProducto();
}
}
Resultado
Al ejecutarlo:
Producto: Laptop
Precio: $15000.0
Qué aporta cada pieza
Aquí MVC se ve en la práctica:
Productocontiene los datos.ProductoViewmuestra la información.ProductoControllercoordina qué información debe mostrarse.
En una tienda real, el modelo podría además consultar una base de datos, mientras que el controlador recibiría las solicitudes del usuario y la vista podría ser una página web.
© Arturo Juárez Monroy