MVC se definió originalmente para facilitar la programación de aplicaciones de escritorio. La vista se suscribió a los eventos del modelo, actualizando la presentación cuando el modelo cambió. El controlador simplemente tradujo los eventos de la interfaz de usuario (por ejemplo, presionar un botón) en llamadas al modelo. Por lo tanto, el controlador y la vista dependían del modelo, pero eran independientes entre sí. El modelo era independiente de ambos. Esto permitió que múltiples vistas y controladores funcionaran en el mismo modelo.
La arquitectura "MVC" utilizada para las aplicaciones web 1.0 (actualización de página completa, sin AJAX) es algo diferente. Se envía una solicitud web a un controlador. El controlador de alguna manera modifica el estado del modelo, luego envía uno o más modelos para que sean representados por una vista. El controlador y la vista dependen del modelo, pero el controlador también depende de la vista.
Con las aplicaciones web 2.0, estamos volviendo a la arquitectura clásica de MVC, en el lado del cliente . El modelo, la vista y el controlador residen en el lado del cliente como objetos Javascript. El controlador traduce los eventos del usuario a acciones modelo. Las acciones del modelo pueden o no resultar en una solicitud AJAX al servidor. Nuevamente, la vista se suscribe a eventos modelo y actualiza la presentación en consecuencia.