mishco Роль - в данном случае это набор ответственностей. Что должен сделать контроллер - инициализировать среду, разобрать запрос, проверить на кеш, изменить Модель, отрендерить Отображение - это и есть роль Контроллера.
Исходя из опыта, мы пришли к выводу, что Контроллер нельзя делать монолитным, иначе в каждом нестандартном случае придется пилить его напильником. Не могу сказать, что сейчас мы на 100% довольны, то расложение монолитного контроллера на составляющие дало больше плюсов, чем минусов.
Кстати, почему это FrontController не рассматриваем? Я подразумеваю под ним набор операций, характерных для большинства запросов к приложению: старт сессии, полностраничное кеширование, система прав доступа, разбор запроса и т.д.