Когда я должен создать новый класс контроллера в ASP.NET MVC? - PullRequest
7 голосов
/ 08 января 2009

Я изучаю MVC, и у меня возникают проблемы с выбором, когда мне следует создать новый контроллер, а не просто добавить действие и представление, связанное с существующим контроллером. С одной стороны, одна ответственность, казалось бы, говорит, что контроллер должен быть ограничен несколькими действиями. Однако, когда я пытаюсь это сделать, количество классов растет в геометрической прогрессии (модель, виды и контроллер для каждого) - до такой степени, что мне интересно, ухожу ли я за борт.

Например, по умолчанию AccountController имеет действия Login, ChangePassword и Register. Вместо этого я хотел бы создать LoginController, PasswordController, ProfileController и связанные классы моделей. Так что там, где был 1 класс, было бы 3-6.

Есть ли хорошее эмпирическое правило по этому вопросу?

Ответы [ 3 ]

10 голосов
/ 08 января 2009

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

AccountController имеет дело со всеми связанными с аутентификацией вещами. Это пример выхода за рамки одной модели, чтобы охватить аутентификацию в целом. Каковы основные части аутентификации? Восстановление пользователей, смена паролей и т. Д.

7 голосов
/ 08 января 2009

Я думаю, вы должны быть прагматичными в этом. Я работаю над проектом, который состоит из StatsController. Число действий постоянно растет (RandomStat, MostPopular, MostViewed, MostVoted и т. Д.), Список можно продолжать и продолжать. Эти действия просто удовлетворить, так как зависимости StatsController не меняются. Я использую IoC для удовлетворения потребностей моих контроллеров, и когда я начинаю видеть, что мои контроллеры нуждаются в ссылках на новые объекты, это сигнал о том, что их нужно разбить на части.

Если все ваши LoginController, PasswordController и ProfileController используют одни и те же объекты, зачем разбивать их на части?

0 голосов
/ 08 января 2009

Мой текущий AccountController имеет 12 методов, которые для меня полностью управляемы.

У меня есть другой контроллер, который в настоящее время имеет 34 метода, но все они привязаны к одному представлению, и каждая из них имеет максимум 8-10 строк кода (проверьте необходимые параметры, обновите модель и при необходимости перенаправьте).

Ключом является инкапсуляция вашей бизнес-логики в отдельный модуль. Это позволит вашим обработчикам действий оставаться чрезвычайно легкими и упростит тестирование вашей бизнес-логики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...