Тут мне кажется опять прослеживается аналогия с концептом веб-фреймворков. Долгое время там контроллер был конечным звеном в отправке ответа, но потом в части фреймворков от этого отказались и стали возвращать ответ из контроллера, разделив формирование ответа от его отправки. После работы контроллера с его ответом можно еще что-нибудь сделать, очистить данные, проверить безопасность, права и т.п. иначе нужно каждый раз править методы контроллеров, а для разных ответов может потребоваться и разная стратегия доставки, обработка ошибок лежит тоже на контроллере и т.п.