Расширение Asp.NET Класс контроллера MVC3

#asp.net-mvc-3

#asp.net-mvc-3

Вопрос:

Я довольно опытный .NET-программист, а также MVC-программист с PHP. Сейчас я новичок в MVC3 и пытаюсь создать свою первую работу над ним, поэтому я имею дело с несколькими вопросами. Для начала, как мне расширить класс контроллера? Может кто-нибудь указать мне на руководство / список методов, которые я должен реализовать?

Спасибо!

Ответ №1:

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

Если вы не знаете, какие методы изменить, у меня возникает вопрос, почему вы хотите его расширить?

Редактировать:

Вы можете воспользоваться двумя примерами приложений на MVC, Nerddiner и Music Store. Они дают вам очень хорошее представление о том, как создавать сайты электронной коммерции и тому подобное в MVC. Не воспринимайте их как евангелие, потому что они являются примерами и должны быть простыми. В настоящее время они не используют лучшие практики, такие как внедрение зависимостей или дизайн репозитория. Несколько ссылок на полезные руководства:

Здесь много хороших видеороликов. Материал Pluralsight довольно прост

Учебное приложение для музыкального магазина

Руководство NerdDinner

Комментарии:

1. В веб-формах у меня всегда был класс базовой страницы, расширяющий System.Web.UI.Page, в котором я написал некоторые свойства, константы и виртуальные методы, а также переопределенные методы, такие как OnPreInit, чтобы что-то сделать до загрузки других классов страниц. Я пытаюсь понять, как добиться такого поведения от контроллеров.

2. @nosuchnick — MVC сильно отличается от Webforms. Обычно вы ничего не переопределяете в конвейере, потому что у вас нет всех дурацких перехватов для системы управления. Вы в значительной степени выполняете всю свою работу в методе Action и выполняете все свое форматирование в представлении. Такие вещи, как константы, вероятно, лучше использовать в статических служебных классах.

3. Хорошо, я это понимаю. Но даже в PHP, с MVC framework codeigniter, я использую базовый контроллер для обработки базовых данных на разных сайтах, таких как зарегистрированный пользователь.

4. @nosuchnick — Вошедший в систему пользователь уже обрабатывается фреймворком, если вы используете Memebership (которым вы должны быть). Я не говорю, что нет необходимости переопределять базовый класс, но это происходит намного реже, чем это требовалось большинству людей. Вы всегда можете расширить класс контроллера и использовать свое расширение. Но это очень просто. Вам нужно добавить только то, что вы хотите добавить, ничего особенного.

5. @gauravvgat — Я не просто указал на учебные пособия по MVC. Я указал на них в дополнение к ответу на вопрос. Вопрос заключался в том, какие методы должны были быть реализованы для расширения контроллера, и ответ, как я правильно ответил .., отсутствует.

Ответ №2:

Вам не нужно ничего внедрять, просто сделайте так, чтобы ваш класс наследовал от System.Web.Mvc.Controller. Обычно в этом нет реальной пользы, но в некоторых случаях может быть полезно создать некоторую форму общего пользовательского базового класса контроллера, который могли бы использовать все контроллеры в вашем проекте.

Однако будьте осторожны при добавлении общих методов к вашим контроллерам. Часто имеет смысл добавить эти методы на более низкий уровень вашего приложения или в качестве вспомогательных методов в ваших моделях или viewmodels.

Комментарии:

1. Спасибо… пожалуйста, прочтите мой комментарий к предыдущему ответу, в котором я объясняю себя немного лучше.

2. Да, хорошо, я придерживаюсь своего ответа. По моему опыту, от использования пользовательского базового контроллера очень мало пользы. Для аутентификации и регистрации пользователей и еще много чего, вы могли бы создать пользовательские actionfilters. Контроллеры действительно должны быть просто обработчиками действий, и они должны быть как можно более тонкими. Смотрите эту презентацию: viddler.com/explore/mvcconf/videos/1 (это для MVC2, но все пункты по-прежнему действительны для MVC3. Несмотря на паршивую запись, она действительно хороша)

3. Спасибо. Я новичок в этом, поэтому уверен, что чему-нибудь научусь.