Сделай всё что тебе нужно в контроллере, потом подумай что он распух и вынеси часть логики в отдельный класс, потом попробуй его протестировать и подумай а какая часть реализации может поменяться и преврати эту часть(части) в зависимость лучше посредством интерфейса
И т.д.
Остановиться при этом можно в любом месте этого "алгоритма" всё зависит от требований и здравого смысла
кстати, тоже думал об этом. Сначала писать все что нужно прямо в контроллере, а потом это привести в порядок - вынести код в другие места, выявить повторяющийся код и так далее. Конечно, с опытом это автоматом все делаешь