Un controller è il mediatore tra il modello e la vista. In sostanza, il controllore legge l'input dell'utente dalla vista e aggiorna il modello in base alle modifiche.
Senza un controller, la vista sarà accoppiata troppo strettamente con il modello di dati. Se dovessi cambiare una piccola cosa nel modello, potrebbe rovinare completamente la vista. Considerando che se si dispone di un controller, una modifica al modello non fa nulla finché non lo si collega al controller e alla vista.
L'intero punto è la separazione delle preoccupazioni. È possibile pensare mentalmente alla vista come all'interfaccia utente, al controller come al luogo in cui si posizionano le regole aziendali, ecc. E al modello come ai dati con cui si desidera interfacciare. Senza una tale separazione, avrai la logica del controller sia nella vista che nel modello, e il codice diventerà un inferno da mantenere e migliorare.