У каждого класса должно быть своя зона ответственности. Если мы говорим о контроллере, то он не должен пестрить огромным полотном кода. Контроллер это такой мост между роутом, логикой и view либо респонсом. Поэтому логику необходимо разделять и выносить в отдельные классы.