MVC è stato originariamente definito per facilitare la programmazione delle applicazioni desktop. La vista è stata sottoscritta per modellare eventi, aggiornando la presentazione quando il modello è cambiato. Il controller ha semplicemente tradotto gli eventi dell'interfaccia utente (ad esempio una pressione di un pulsante) nelle chiamate al modello. Quindi il controller e la vista dipendevano dal modello, ma erano indipendenti l'uno dall'altro. Il modello era indipendente da entrambi. Ciò ha consentito a più viste e controller di lavorare sullo stesso modello.
L'architettura "MVC" utilizzata per le applicazioni Web 1.0 (aggiornamento pagina intera, senza AJAX) è leggermente diversa. Una richiesta web viene inviata a un controller. Il controller modifica in qualche modo lo stato del modello, quindi invia uno o più modelli da renderizzare da una vista. Il controller e la visualizzazione dipendono entrambi dal modello, ma il controller dipende anche dalla vista.
Con le applicazioni Web 2.0, stiamo tornando alla classica architettura MVC, sul lato client . Il modello, la vista e il controller risiedono sul lato client come oggetti Javascript. Il controller traduce gli eventi utente in azioni del modello. Le azioni del modello possono o non possono risultare in una richiesta AJAX al server. Di nuovo, la vista si abbona agli eventi del modello e aggiorna la presentazione di conseguenza.