¿Cuál es la arquitectura MVC (modelo-vista-controlador) en términos simples?

Dibujemos una analogía de un programa escrito usando MVC en una tienda de Apple:

El modelo es la trastienda. Almacena iGoods y los organiza.

The View es la sala de exposición de la tienda. Muestra iGoods para que los clientes puedan verlos.

El controlador es el empleado. Ella responde a los clientes, llevando o devolviendo iGoods a la trastienda.

Desde la perspectiva del programa:

  • “iGoods” son los datos del programa
  • los clientes son usuarios
  • “tomar o devolver iGoods” significa actualizar los datos del programa, en base a la entrada del usuario

Tenga en cuenta que hay muchas variantes de MVC que cambian ligeramente las definiciones, o asignan más responsabilidad a uno de los componentes, pero la idea central es separar los datos y la presentación: de esa manera, cuando salga el nuevo iPhone 5, usted no ‘ No tengo que reconstruir toda la Apple Store.

Me encanta esta analogía tomada de Stack Overflow.

MVC puede estar metafóricamente relacionado con un televisor. Tiene varios canales, con información diferente sobre ellos suministrada por su proveedor de cable (el modelo). La pantalla del televisor le muestra estos canales (la vista). Al presionar los botones en los controles remotos afecta lo que ve y cómo lo ve (el controlador).

La arquitectura establece rutas de comunicación bien definidas entre lo que ve (la Vista) y el estado actual de lo que se está modelando (el Modelo). Reutilizando la analogía de la tienda:

El modelo es el inventario de la tienda, los tipos de productos, el número de empleados, el horario de atención, el número de teléfono de la tienda, la ubicación de la tienda.

The View es el sitio web de la tienda y el piso de la tienda donde se exhiben los productos.

El controlador son los empleados de la tienda. Los empleados venden productos, modificando el inventario de la tienda (Modelo) y, según el diseño que utilice, también pueden ser responsables de eliminar los productos del escaparate (actualizar la Vista).

He visto 2 diseños principales en implementaciones de MVC. 1 diseño asigna la responsabilidad de actualizar la sala de exposición (la Vista) directamente a los empleados (los Controladores). Otro diseño establece una comunicación directa entre el Modelo y la Vista, permitiendo que la Vista se actualice a sí misma al ser notificada de los cambios por el Modelo, y la responsabilidad principal del Controlador es actualizar el Modelo directamente y responder a los eventos que suceden en la Vista.