Il controller riceve la richiesta, elabora i risultati ed deve fornire una risposta "visuale". Il controller non si occupa di fornire la risposta visuale (che aggiungerebbe complessità a quanto già deve fare) perciò si limita a popolare una classe che contiene i risultati e passarla ad un altra classe che si occuperà di tradurli in una vista.

la classe che contiene i risultati è il model, la classe che si occuperà di popolare una vista con quei dati è la view.

senza scendere nei dettagli delle varie implementazioni (che cambiano molto l'una dall'altra) generalmente per ogni possibile richiesta al sistema ci saranno tre classi:

un controller: accetta input elabora risultati memorizzandoli nel model
un model: classe priva di logica che contiene i risultati da visualizzare
una view: classe richiamata dal controller che riceverà in input il model e fornirà i risultati in maniera visiva.

tutte e tre vanno sviluppate.

EDIT:
mi permetto di aggiungere che lo scopo di mvc non è quello di rendere il codice riutilizzabile ma quello di spalmare la complessita su almeno due attori distinti (controller e view). Se vuoi del codice riutilizzabile devi refattorizzare nell'ambito del controller (la parte dell'elaborazione) in ulteriori classi (generalmente dette di business) ma un controller nella sua interezza non è agnostico al 100% della view... si separa da essa solo in termini di responsabilità.