Что такое ASP.Net MVC? - PullRequest
       45

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

15 голосов
/ 18 сентября 2008

Когда я впервые услышал о 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 нечто большее, чем пара дополнительных шаблонов в меню Файл-> Новый?

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

EDIT

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

Ответы [ 8 ]

14 голосов
/ 18 сентября 2008

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

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

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

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

7 голосов
/ 18 сентября 2008

Скотт Гатри объяснил это в этом посте " ASP.NET MVC Framework "

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

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

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

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

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

1 голос
/ 18 сентября 2008

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

1 голос
/ 18 сентября 2008

Отличная статья Дино Эспозито, предназначенная для объяснения ASP.net MVC разработчикам веб-форм ASP.net:

http://dotnetslackers.com/articles/aspnet/AnArchitecturalViewOfTheASPNETMVCFramework.aspx

1 голос
/ 18 сентября 2008

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

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

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

0 голосов
/ 18 сентября 2008
0 голосов
/ 18 сентября 2008

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

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

0 голосов
/ 18 сентября 2008

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

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