Вопрос

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

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

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

РЕДАКТИРОВАТЬ

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

  • Он включает в себя очень мощный компонент картирования URL, который позволяет создавать приложения с чистыми URL -адресами.URL-адреса не должны иметь расширения внутри них и предназначены для легко поддержки SEO и Rest Friendsy Satterns.Например, я мог бы легко отобразить URL/redit/redit/4 с действием «Редактировать» класса ProductsController в моем проекте выше, или сопоставить/блоги/Скоттгу/10-10-2007/Someopic/url на "" DisplayPost «Действие класса BlogEngineController.

  • Фреймворк MVC поддерживает использование существующих файлов ASP.NET .ASPX, .ASCX и .master Markup в качестве «шаблонов просмотра» (то есть вы можете легко использовать существующие функции ASP.NET, такие как вложенные основные страницы, < %= %> Снаски, декларативные Управление сервера, шаблоны, связывание данных, локализация и т. Д.).Однако он не использует существующую модель после спины для взаимодействия обратно на сервер.Вместо этого вы отправите все взаимодействия с конечным пользователем в класс контроллера, что помогает обеспечить чистое разделение проблем и тестируемость (это также означает отсутствие ViewState или Lifecycle Page с видами на основе MVC).

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top