Чтобы найти правильную группу для контроллеров, подумайте о тестировании .
(Даже если вы на самом деле не проводите никакого тестирования, размышления о том, как вы будете проводить тестирование ваших контроллеров, дадут вам очень хорошее представление о том, как их структурировать.)
An AuthenticationControllerне является тестируемым сам по себе, потому что он содержит только функциональные возможности для входа и выхода, но ваш тестовый код должен будет каким-то образом создать поддельные учетные записи для целей тестирования, прежде чем он сможет протестировать успешный вход в систему. Вы можете обойти тестируемую подсистему и перейти непосредственно к своей модели для создания учетных записей тестирования, но тогда у вас будет хрупкий тест в ваших руках: если модель изменится, вам придется изменять не только код, который тестирует модель, но также и код, который тестирует контроллер, хотя интерфейс и поведение контроллера остались неизменными. Это неразумно.
A LoginControllerне подходит по тем же причинам: вы не можете протестировать его, не создав сначала учетные записи, и есть еще больше вещей, которые вы не можете протестировать, например, например, запрет повторных входов в систему, но затем разрешение пользователю войти в систему после выхода из системы. (Поскольку этот контроллер не имеет функции выхода из системы.)
An AccountControllerпредоставит вам все необходимое для проведения тестирования: вы можете создать тестовую учетную запись и затем попытаться войти в нее, вы можете удалить учетную запись, а затем убедиться, что вы больше не можете войти в систему, вы можете изменить пароль и убедиться, что Для входа в систему необходимо использовать правильный пароль и т. д.
В заключение: для того, чтобы написать даже самый маленький набор тестов, вам нужно сделать все функциональные возможности AccountControllerдоступными для него. Подразделение его на более мелкие контроллеры, по-видимому, приводит к тому, что контроллеры с ограниченными возможностями не обладают достаточной функциональностью для проведения надлежащего теста. Это очень хороший признак того, что функциональность AccountControllerявляется самым маленьким подразделением, которое имеет смысл.
И вообще, подход «думать о тестировании» будет работать не только в этом конкретном сценарии, но и в любом подобном сценарии, с которым вы столкнетесь в будущем.