Modelo vista controlador: cómo separar responsabilidades
Clase 14 de 43 • Curso Profesional de Arquitectura de Software
Contenido del curso
Atributos de calidad
- 2

Qué son los atributos de calidad en software
01:49 min - 3

Cómo medir idoneidad funcional en software
02:52 min - 4

Qué es eficiencia de ejecución en software
04:14 min - 5

Cómo medir interoperabilidad y coexistencia
03:49 min - 6

Qué es la usabilidad y sus 6 dimensiones
08:14 min - 7

Cómo medir confiabilidad en software
05:38 min - 8

Los 5 pilares de seguridad en software
04:01 min - 9

Cómo garantizar mantenibilidad con tests
06:27 min - 10

Adaptabilidad vs capacidad de instalación vs reemplazo
02:48 min - 11

Tensiones entre atributos de calidad de software
04:04 min - 12

Atributos de calidad según fase de empresa
07:00 min
Patrones de arquitectura
- 13

Qué es un patrón de arquitectura
02:50 min - 14

Modelo vista controlador: cómo separar responsabilidades
Viendo ahora - 15

Arquitectura en capas: controller, servicio y repositorio
03:14 min - 16

Event sourcing vs bases relacionales
06:17 min - 17

Qué es la arquitectura microkernel
01:52 min - 18

Arquitectura Comparte Nada con Map Reduce
02:29 min - 19

Patrón de microservicios: cuándo y cómo
03:57 min - 20

Qué es CQRS y cómo separa lectura de escritura
03:24 min - 21

Arquitectura hexagonal: puertos y adaptadores
04:10 min - 22

Qué son los contextos delimitados en DDD
05:34 min - 23

Cómo combinar patrones de arquitectura
09:22 min - 24

Evolución de patrones desde monolito a microservicios
07:58 min
Diseño de una arquitectura
- 25

Cómo traducir requerimientos en decisiones arquitectónicas
02:18 min - 26

Conectores en arquitectura: tipos y cuándo usarlos
06:18 min - 27

Llamadas asíncronas vs síncronas vs cliente-servidor
03:05 min - 28

Conector enrutador vs difusión: Twitter
01:55 min - 29

Conectores cola, repositorio y pub/sub
03:52 min - 30

Framework de diseño orientado a atributos
01:55 min - 31

Cómo detectar fallas y reparar sistemas
05:59 min - 32

Cómo recuperar y prevenir fallas en sistemas
04:09 min - 33

Tácticas para confinar modificaciones
06:15 min - 34

Cómo prevenir efectos dominó en software
12:17 min - 35

Tácticas para controlar eficiencia de ejecución
09:14 min - 36

Cómo detectar, resistir y recuperarse de ataques
09:02 min - 37

Cómo probar que el software funciona correctamente
05:14 min - 38

Cómo controlar la usabilidad con tácticas
08:20 min - 39

Cómo validar arquitectura con ATAM y métricas
06:34 min - 40

Evolución de arquitectura: startup a gran escala
10:30 min
Modelado y documentación de arquitectura
El modelo vista controlador es un patrón clave para organizar aplicaciones con claridad y escalabilidad. Al separar responsabilidades —lo que el usuario hace, cómo se representa el dominio y cómo se muestra en pantalla— permite que cada parte evolucione sin romper a las demás. Aquí entenderás su espíritu, sus variaciones y un ejemplo práctico centrado en la web.
¿Qué es modelo vista controlador y por qué separa responsabilidades?
El patrón divide el sistema en tres partes: la vista, el modelo y el controlador. La vista define cómo se ve la interfaz. El modelo describe qué puede hacer el sistema y representa el estado del dominio. El controlador gestiona las acciones del usuario y coordina la respuesta.
- Separación de responsabilidades. La vista cambia sin tocar el modelo, y las acciones de usuario pueden reutilizar el mismo modelo y la misma vista.
- Independencia de presentación y dominio. El modelo no debe conocer a las vistas ni cómo se muestran los datos. Así, el modelo evoluciona sin depender del diseño visual.
- Comunicación focalizada. La relación más importante es entre vista y modelo, manteniendo bajo acoplamiento con el controlador cuando sea posible.
- Flexibilidad sin exagerar la granularidad. No exige “un objeto por cada modelo” ni “una vista por cada tipo de aplicación”. Importa el rol, no la forma rígida.
¿Cómo se conectan vista, modelo y controlador en la práctica?
Lo esencial es definir cómo se comunican estos componentes. Hay implementaciones donde el controlador conoce a la vista y al modelo, y otras donde existen conectores alternativos. Cambian los enlaces, pero se mantiene la idea central: separar acciones del usuario, estado del sistema y presentación.
¿Qué ocurre en un ejemplo de carrito de compras y ruteo?
Imagina a una persona que desea ver su carrito de compras en un sitio web. La solicitud viaja a través de un ruteo que convierte una URL en un pedido a objetos hasta llegar a un controller.
- El controller gestiona la acción: decide qué hacer para responder “ver el carrito”.
- Coordina con el modelo: interactúa con el modelo que representa el carrito.
- El modelo puede acceder a datos: ya sea mediante un ORM o ejecutando SQL queries.
- El patrón no dicta persistencia: no define cómo conectarse a la base de datos, solo que exista un modelo que represente el estado del sistema.
- La respuesta se renderiza con una vista: el controller puede elegir la vista adecuada.
- Existen variaciones: el controller puede no conocer la vista; el ruteo puede vincularlos sin acoplarlos; incluso la vista puede observar al modelo y actualizarse sin controller en el medio.
¿Qué no define modelo vista controlador sobre persistencia?
El patrón no se preocupa por cómo el modelo se hace persistente ni por la tecnología de acceso a datos. Puede usar un ORM, consultas directas o no persistir. Lo crucial es que el modelo esté separado de la vista y del controlador.
¿Qué alternativas comparten el mismo espíritu de separación?
Existen patrones que comparten la misma idea de separar acciones del usuario, estado del sistema y presentación, variando en cómo conectan sus partes.
- Model view, view model en C# y ASP .NET. Propone un modelo de vista que media entre la vista y el modelo, manteniendo responsabilidades separadas.
- Modelo vista presentador. Cambia el rol de acción del usuario por un coordinador de vistas, pero sigue separado de vista y modelo.
- Arquitectura flux. Define un flujo de datos de una sola vía, separando acciones de usuario (acciones), el modelo como store y las vistas como componentes de React.
¿Te gustaría compartir cómo aplicas estas separaciones en tus proyectos o qué variación te funcionó mejor?