Z tego co kojarzę, to kontroler pobiera dane z modelu i wyświetla za pomocą widoku.
Służy to temu, że różne kontrolery mogą potrzebować te same dane z modelu (np. lista użytkowników), a po co obrabiać je w dwóch różnych miejscach pisząc ten sam kod, jak można raz napisać klasę i metodę i potem tylko wywoływać. Widok z kolei te pobrane dane z modelu odpowiednio wyświetla.
Ot tak najprościej mozna to powiedziec, nie wiem tylko czy się gdzieś w tym uproszczaniu nie zakręciłem.