Контроллеры необходимы для обработки запросов в сервере и служат точками входа в API. Они могут иметь связь с конкретными сущностями (например, "получить список пользователей"), но это не всегда так.
Количество контроллеров зависит от потребностей проекта. Необходимо создавать только те контроллеры, которые действительно нужны. Часто у сущностей различается логика, и они не мапятся один-в-один на контроллеры.
Хорошей практикой является использование контроллеров для обработки маршрутов. В таком случае методы контроллеров могут быть очень простыми, а сложная логика переносится на слой сервисов, где ее легко можно универсализировать, если это необходимо.