Что такое ASP.Net MVC?

Когда я впервые услышал о StackOverflow и слышал, что он был создан в ASP.Net MVC, я был немного смущен. Я думал, что ASP.Net всегда был примером архитектуры MVC. У вас есть страница .aspx, которая предоставляет представление, страницу .aspx.vb, которая предоставляет контроллер, и вы можете создать другой класс, который будет моделью. Процесс использования MVC в ASP.Net описан в статье Microsoft.

Итак, мой вопрос. Что ASP.Net MVC обеспечивает, что вы не сможете делать с обычным ASP.Net(даже в ASP.Net 1.1)? Это просто модные URL-адреса? Это просто для того, чтобы хвастаться за то, что MS могла сравниться с новыми технологиями, такими как Ruby On Rails, и сказать: "Мы тоже можем это сделать"? Есть ли что-то большее, чем ASP.Net MVC, а не несколько дополнительных шаблонов в меню File- > New?

Вероятно, сейчас я чувствую себя очень скептически и негативно, поэтому я просто остановлюсь. Но я действительно хочу знать, что фактически предоставляет ASP.Net MVC. Кроме того, если кто-нибудь может сказать мне, почему это Model-View-Controller, а не в порядке слоев View-Controller-Model или Model-Control-View в зависимости от того, собираетесь ли вы идти сверху вниз или наоборот, я бы действительно ценят это тоже.

ИЗМЕНИТЬ

Кроме того, вероятно, стоит отметить, что я никогда не интересовался моделью веб-форм (AKA-сервер). Я использовал его минимально и никогда не работал.

Ответы

Ответ 1

.aspx не соответствует шаблону MVC, потому что страница aspx ( "вид" ) вызывается перед кодом ( "контроллер" ).

Это означает, что контроллер имеет "жесткую зависимость" от представления, что очень сильно противоречит принципам MVC.

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

Тестирование контроллера само по себе намного быстрее, чем необходимость создания всего конвейера asp.net(приложение, запрос, ответ, состояние просмотра, состояние сеанса и т.д.).

Ответ 2

Скотт Гатри объяснил это в этой статье " ASP.NET MVC Framework "
  • Это обеспечивает чистое разделение проблем, тестируемости и TDD на по умолчанию. Все основные контракты в рамках структура MVC основана на интерфейсах и легко макет (он включает интерфейс основан IHttpRequest/IHttpResponse встроенные функции). Вы можете unit testприложения без необходимости запуска Контроллеры в процессе ASP.NET(быстрое тестирование модулей). Ты можешь используйте любую модульную систему тестирования захотите сделать это тестирование (в том числе NUnit, MBUnit, MS Test и т.д.).

  • Он очень расширяемый и подключаемый. Все в MVC структура разработана таким образом, что она может легко заменить/настроить (для пример: вы можете подключить плагин ваш собственный механизм просмотра, политика маршрутизации, сериализация параметров и т.д.). Это также поддерживает использование существующих инъекции зависимостей и контейнера МОК модели (Windsor, Spring.Net, NHibernate и т.д.).

  • Он включает очень мощный компонент сопоставления URL-адресов, который позволяет вам создавать приложения с чистыми URL-адресами. URL-адреса не должны иметь расширения внутри них, и предназначены для легко поддерживать SEO и REST-friendly именования. Например, я мог бы легко сопоставить URL-адрес/products/edit/4 действие "Изменить" Класс продуктовКонтроллер в моем проекте выше, или сопоставить /Блоги/ScottGu/10.10.2007/SomeTopic/ URL-адрес действия "DisplayPost" Класс BlogEngineController.

  • Структура MVC поддерживает использование существующих ASP.NET.ASPX,.ASCX и .Master файлы разметки как "view шаблонов" (что означает, что вы можете легко использовать существующие функции ASP.NET, такие как вложенные мастер-страницы, <% =% > фрагменты, декларативные серверные элементы управления, шаблоны, привязка данных, локализация, и т.д). Однако он не использует существующая модель обратной обратной связи для взаимодействия с сервером. Вместо этого вы будете маршрутизировать всех конечных пользователей взаимодействия с классом контроллера вместо этого - что помогает обеспечить чистоту разделение проблем и проверяемость (это также означает отсутствие viewstate или страницы жизненный цикл с представлениями на основе MVC).

  • Структура ASP.NET MVC полностью поддерживает существующие функции ASP.NET аутентификация форм/окон, URL-адрес авторизация, членство/роли, вывода и кэширования данных, управление сеансом/профилем, мониторинг состояния здоровья, конфигурация системы, архитектуры провайдера, и др.

Ответ 3

В первую очередь, очень легко создавать тестируемые веб-сайты с четко определенным разделением ответственности. Его также намного проще создавать действительные пользовательские интерфейсы XHTML, используя новую инфраструктуру MVC.

Я использовал второй CTP (я думаю, что им уже пять), чтобы начать работу на веб-сайте, и, создав несколько веб-приложений раньше, я должен сказать его сотни раз лучше, чем использовать серверный контроль модель.

Управление сервером прекрасное, если вы не знаете, что делаете. Когда вы начинаете узнавать о том, как веб-приложения должны функционировать, вы начинаете бороться с ними. В конце концов, вы должны написать свой собственный, чтобы преодолеть недостатки существующих элементов управления. Его в этот момент, когда MVC начинает сиять. И это даже не учитывая возможность проверки вашего сайта...

Ответ 5

Больше не созданных сгенерированных идентификаторов html!!! Любой, кто делает какой-либо javascript, ценит этот факт.

Ответ 6

ASP.Net с этим кодом стоит почти MVC, но нет - одна большая вещь, которая не делает этого, заключается в том, что codebehinds привязаны непосредственно к aspx - который является большим компонентом MVC. Если вы думаете о кодах в качестве контроллера - он должен быть полностью отделен от представления. Новый .NET MVC завершает это - и предоставляет полную структуру MVC. Хотя для .NET уже существуют существующие (см. Spring.NET).

Ответ 7

Я просмотрел пару простых примеров, таких как этот. Я могу видеть разницу. Тем не менее, я действительно не вижу, как MVC отключает представление от контроллера. Представление все еще ссылается на то, что в контроллере. Я вижу, как это значительно облегчает тестирование, и что по крайней мере в MVC контроллер не имеет никакого представления о представлении. И вам не придется обрабатывать представление для вызова методов в контроллере. Я вижу этот довольно прыжок, хотя на первый взгляд это может показаться не таким уж большим.

Я согласен с @Will о борьбе с серверными элементами управления. Я никогда не работал в ситуации, когда они были фактически использованы, но многие люди, которых я знаю, имеют, с которыми сталкиваются некоторые ограничения.