Открыть сервис

ASP.NET MVC

ASP.NET MVC — это веб-фреймворк, разработанный корпорацией Microsoft, реализующий шаблон проектирования Model-View-Controller (MVC) для создания веб-приложений на платформе .NET. Он предоставляет разработчикам альтернативу классической технологии ASP.NET Web Forms, предлагая более полный контроль над HTML-разметкой, URL-адресами и разделением логики приложения. ASP.NET MVC является частью более широкой экосистемы ASP.NET и впоследствии стал основой для современного фреймворка ASP.NET Core.

История

Предпосылки и создание

К середине 2000-х годов веб-разработка на платформе Microsoft была сосредоточена вокруг ASP.NET Web Forms, которая абстрагировала работу с HTTP и HTML, имитируя модель событийно-ориентированных настольных приложений. Однако у Web Forms был ряд недостатков: сложность тестирования, большой объем генерируемого HTML (ViewState), трудности с контролем над URL и ограниченная поддержка современных веб-стандартов. В сообществе разработчиков рос интерес к альтернативным подходам, в частности к шаблону MVC, популяризированному такими фреймворками, как Ruby on Rails и Django.

Первая версия ASP.NET MVC была анонсирована Скоттом Гатри (Scott Guthrie) в 2007 году и выпущена 13 марта 2009 года. Она была построена поверх существующей платформы ASP.NET и предлагала разработчикам чистую разделяемую архитектуру, полный контроль над HTML и возможность модульного тестирования. Фреймворк изначально распространялся по лицензии Microsoft Public License (Ms-PL) и был открытым исходным кодом, хотя и не под управлением сообщества, как это стало позже.

Развитие версий

  • ASP.NET MVC 2 (март 2010 года): добавил поддержку атрибутов валидации моделей, шаблонные вспомогательные методы (Templated Helpers) и атрибут [HandleError] для централизованной обработки ошибок.
  • ASP.NET MVC 3 (январь 2011 года): представил механизм представлений Razor View Engine, который стал стандартом для всех последующих версий. Также была добавлена поддержка внедрения зависимостей (Dependency Injection) через глобальные фильтры и IDependencyResolver.
  • ASP.NET MVC 4 (август 2012 года): оптимизирован для создания мобильных веб-приложений, включая поддержку адаптивного дизайна и режима отображения (Display Modes). Также была добавлена поддержка Web API (изначально как часть ASP.NET MVC, затем выделена в отдельный проект).
  • ASP.NET MVC 5 (октябрь 2013 года): последняя версия, выпущенная для классической платформы .NET Framework. Включала атрибутивную маршрутизацию (Attribute Routing), фильтры аутентификации и улучшенную интеграцию с Identity.

Переход к ASP.NET Core

В 2014 году Microsoft анонсировала ASP.NET Core — полностью переписанную, кроссплатформенную и модульную версию ASP.NET. ASP.NET MVC 5 стал последней версией для классического .NET Framework. Начиная с ASP.NET Core 1.0, функциональность MVC была интегрирована непосредственно в ядро фреймворка. Разработка классического ASP.NET MVC была прекращена, и все новые функции и улучшения реализуются только в ASP.NET Core.

Архитектура и принципы

ASP.NET MVC строго следует шаблону проектирования MVC, разделяя приложение на три основных компонента:

  • Model (Модель): содержит бизнес-логику и данные приложения. Модель отвечает за получение, хранение и обработку данных, а также за определение правил валидации. Она не зависит от представления или контроллера.
  • View (Представление): отвечает за отображение данных пользователю. В классическом ASP.NET MVC представления создаются с помощью Razor View Engine, который позволяет встраивать код C# непосредственно в HTML-разметку. Представления получают данные от контроллера и не содержат бизнес-логики.
  • Controller (Контроллер): обрабатывает входящие HTTP-запросы, взаимодействует с моделью для получения данных и выбирает представление для отображения результата. Контроллеры являются точкой входа для всех запросов и содержат методы действий (Action Methods), которые соответствуют конкретным URL-адресам.

Конвейер обработки запроса

Обработка запроса в ASP.NET MVC проходит через несколько этапов:

  1. Маршрутизация (Routing): система маршрутизации (обычно RouteCollection) сопоставляет входящий URL с конкретным контроллером и действием.
  2. Создание контроллера: фреймворк создает экземпляр соответствующего контроллера (с использованием внедрения зависимостей, если настроено).
  3. Выполнение действия: вызывается метод действия контроллера. Внутри метода происходит работа с моделью (например, получение данных из базы данных).
  4. Выбор представления: метод действия возвращает объект ActionResult, который указывает, какое представление должно быть отрендерено и какие данные (модель) ему передать.
  5. Рендеринг представления: движок представлений (Razor) обрабатывает шаблон, встраивая данные модели в HTML, и отправляет результат клиенту.

Основные компоненты

Razor View Engine

Razor — это синтаксис разметки, используемый для создания представлений. Он позволяет писать код C# (или VB.NET) непосредственно в HTML-файлах, используя символ @ для переключения между HTML и кодом. Пример:

```razor @model IEnumerable<Product>

<ul> @foreach (var product in Model) { <li>@product.Name - @product.Price</li> } </ul> ```

Razor View Engine был представлен в ASP.NET MVC 3 и полностью заменил устаревший Web Forms View Engine.

Маршрутизация

Система маршрутизации ASP.NET MVC позволяет определять шаблоны URL, которые сопоставляются с контроллерами и действиями. По умолчанию используется маршрут:

`` {controller}/{action}/{id} ``

Начиная с версии 5, была добавлена атрибутивная маршрутизация, позволяющая задавать маршруты непосредственно в коде контроллера:

``csharp [Route("products/{id:int}")] public ActionResult Details(int id) { // ... } ``

Фильтры

Фильтры — это атрибуты, которые позволяют выполнять код до или после выполнения действия контроллера. Основные типы фильтров:

  • Authorization Filters: проверяют права доступа пользователя.
  • Action Filters: выполняют код до и после выполнения действия.
  • Result Filters: выполняют код до и после рендеринга представления.
  • Exception Filters: обрабатывают необработанные исключения.

Пример фильтра авторизации:

``csharp [Authorize(Roles = "Admin")] public ActionResult AdminPanel() { // ... } ``

Вспомогательные методы HTML (HTML Helpers)

Вспомогательные методы HTML — это методы, которые генерируют HTML-разметку в представлениях. Они позволяют создавать формы, ссылки, поля ввода и другие элементы, не вручную прописывая HTML. Примеры:

  • @Html.TextBoxFor(m => m.Name) — генерирует <input type="text">.
  • @Html.ActionLink("О нас", "About") — генерирует гиперссылку.
  • @Html.BeginForm() — генерирует открывающий тег <form>.

Применение

ASP.NET MVC 5 широко применялся для создания корпоративных веб-приложений, порталов, интернет-магазинов и систем управления контентом (CMS) на платформе .NET Framework. Он был особенно популярен в средах, где требовался полный контроль над HTML, CSS и JavaScript, а также возможность модульного тестирования. Фреймворк использовался в таких продуктах, как:

  • Orchard CMSсистема управления контентом с открытым исходным кодом.
  • Umbraco — популярная CMS на платформе .NET (изначально на Web Forms, но с версии 7 получила поддержку MVC).
  • NopCommerce — платформа для электронной коммерции с открытым исходным кодом.

Критика и ограничения

Несмотря на свою популярность, ASP.NET MVC 5 имел ряд недостатков, связанных с его зависимостью от классического .NET Framework:

  • Привязка к Windows: фреймворк работал только под управлением операционной системы Windows и Internet Information Services (IIS).
  • Сложность конфигурации: файл Web.config часто становился громоздким и трудным для поддержки.
  • Производительность: по сравнению с ASP.NET Core, классический ASP.NET MVC имел более высокие накладные расходы на обработку запросов.
  • Устаревшая архитектура: отсутствие встроенной поддержки современных практик, таких как контейнеры внедрения зависимостей (хотя интеграция была возможна).

Эти ограничения стали основными причинами перехода Microsoft на ASP.NET Core, который лишен этих недостатков и является современным, кроссплатформенным решением.

Интересные факты

  • Изначально ASP.NET MVC разрабатывался как альтернатива Web Forms, и Microsoft поддерживала оба фреймворка параллельно в течение нескольких лет.
  • Первая версия ASP.NET MVC была выпущена под лицензией Ms-PL, что сделало ее одним из первых проектов Microsoft с открытым исходным кодом.
  • Razor View Engine был разработан командой, в которую входил Марк Ашер (Mark Ash), и его синтаксис был вдохновлен языком шаблонов из проекта Mothra.

Источники

  • Microsoft Docs: ASP.NET MVC Overview (архивная версия)
  • Scott Guthrie, "ASP.NET MVC Framework", 2007
  • Jon Galloway, Phil Haack, Brad Wilson, K. Scott Allen, "Professional ASP.NET MVC 5", Wrox, 2014
  • MSDN Magazine: "Introduction to ASP.NET MVC", 2009

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →