#asp.net-mvc-3
#asp.net-mvc-3
Вопрос:
Я довольно опытный .NET-программист, а также MVC-программист с PHP. Сейчас я новичок в MVC3 и пытаюсь создать свою первую работу над ним, поэтому я имею дело с несколькими вопросами. Для начала, как мне расширить класс контроллера? Может кто-нибудь указать мне на руководство / список методов, которые я должен реализовать?
Спасибо!
Ответ №1:
Вам не нужно реализовывать какие-либо методы для расширения контроллера, хотя, очевидно, было бы довольно глупо не делать этого. Вы просто наследуете от него и переопределяете методы, которые хотите изменить.
Если вы не знаете, какие методы изменить, у меня возникает вопрос, почему вы хотите его расширить?
Редактировать:
Вы можете воспользоваться двумя примерами приложений на MVC, Nerddiner и Music Store. Они дают вам очень хорошее представление о том, как создавать сайты электронной коммерции и тому подобное в MVC. Не воспринимайте их как евангелие, потому что они являются примерами и должны быть простыми. В настоящее время они не используют лучшие практики, такие как внедрение зависимостей или дизайн репозитория. Несколько ссылок на полезные руководства:
Здесь много хороших видеороликов. Материал Pluralsight довольно прост
Комментарии:
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. Спасибо. Я новичок в этом, поэтому уверен, что чему-нибудь научусь.