Построение приложений на основе шаблона "Model-View-Controller" с применением ASP.NET MVC Framework
Обзор ASP.NET MVC Framework
После появления на свет платформы ASP.NET и инструмента ASP.NET для создания Web Forms она стала пользоваться большой популярностью среди разработчиков веб-приложений. Однако, мировая практика разработки приложений на ASP.NET Web Forms показала, что такой подход может способствовать смешиванию программного кода бизнес-логики с кодом представления. Особенно это характерно для неопытных разработчиков. Другими словами, разработчики создают приложения на основе ASP.NET Web Forms так, что код страницы содержит элементы логики, которые правильно бы было разместить в отдельных объектах. Кроме того, в типичных приложениях на основе ASP.NET Web Forms как правило отсутствуют элементы формирования "читаемых" адресов страниц. Также ASP.NET Web Forms провоцирует к появлению лишних элементов в HTML-разметке страницы (например, содержимое полей ViewState). Эти и другие проблемы, связанные с разработкой на основе ASP.NET Web Forms привели к появлению еще одного инструмента разработки веб-приложений в составе ASP.NET – ASP.NET MVC Framework.
В основе идеологии ASP.NET MVC Framework лежит идея разделения кода на три составляющие – модель (бизнес-логика), контроллер (обработка пользовательского ввода) и представление (генерируемый HTML-код). Эта идея описана в рамках шаблона проектирования "Model-View-Controller" (MVC), который применяется при разработке различных типов приложений; веб-приложения – это лишь один из примеров применения этого шаблона проектирования.
На самом деле использовать шаблон "Model-View-Controller" можно и в рамках ASP.NET Web Forms. Однако, как показывает практика, это делают лишь опытные профессионалы, которые долгое время занимаются разработкой веб-приложений. По умолчанию шаблоны проектов ASP.NET Web Forms не содержат упоминаний об этом шаблоне проектирования, и реализация этого шаблона полностью ложится на плечи разработчика.
Как уже упоминалось, основная идея шаблона проектирования "Model-View-Controller" состоит в том, что функциональность каждого пользовательского сценария разбивается на три части – модель, представление и контроллер. Модель в данном случае является тем местом, где реализуется вся бизнес-логика, определяются бизнес-процессы, происходит взаимодействие с уровнем доступа к данным и т.д. Кроме того, модель, как правило, определяет все базовые сущности, с которыми впоследствии оперируют остальные уровни.
Уровень представления в этой схеме играет также важную роль, поскольку он отвечает за генерацию пользовательского интерфейса (код HTML). На данном уровне не выполняется никаких бизнес-операций, а просто принимаются решения о том, каким образом генерировать представление пользовательского интерфейса. При этом уровень представления использует данные, которые поступают от модели.
Контроллер является связующим звеном и, фактически, обрабатывает пользовательский ввод и принимает решение о том какое именно представление использовать в данный момент, а также передает ему данные, полученные от модели.
При получении запроса от клиента он передается соответствующему контроллеру. Контроллер определяется в соответствии с таблицей маршрутов, которая также определяется в приложении. Контроллер на основе полученной информации о запросе выполняет все необходимые взаимодействия с моделью, выбирает представление, которое будет использоваться и передает управление этому представлению; также представлению передаются необходимые данные, полученные от модели.
Такое разделение программного кода позволяет добиться нескольких положительных эффектов, которые получаются из-за четкого разделения ответственности между объектами:
- становится возможным работать с моделью и тестировать модель независимо от представления и других частей приложения;
- все остальные компоненты приложения также остаются независимыми;
- появляется возможность подменять представления теми, которые необходимы в данный момент, при этом не затрагивая код модели или контроллеров. Например, в различных ситуациях можно генерировать HTML-представление или RSS-представление одних и тех же данных, поступающих от модели.
Конечное преимущество кода с разделением ответственности сводится к более низкой связности компонентов системы, что с точки зрения практики разработки приложения является показателем более высококачественного программного кода.
Отдельным механизмом, заслуживающего внимания, является механизм маршрутизации запросов внутри приложения. Этот механизм позволяет определить шаблоны адреса HTTP и сопоставить различным адресам соответствующие контроллеры и их операции.
Таким образом, процесс обработки запроса в приложении на базе ASP.NET MVC Framework протекает следующим образом:
- поступает запрос от клиента;
- на основании таблицы маршрутов выбирается первый подходящий для данного адреса маршрут;
- на основе выбранного маршрута выбирается необходимый контроллер, который будет заниматься обработкой этого запроса;
- на основе запроса внутри контроллера выбирается действие (метод класса), которое должно быть выполнено;
- при выполнении действия контроллера обрабатывается пользовательский ввод и другие параметры, которые влияют на функционирование приложения, а также выбирается представление и генерируются данные для него; также на данном этапе может осуществляться работа с моделью;
- представление на основе полученных данных генерирует содержимое, которое будет отправлено клиенту (как правило, код HTML);
- полученное содержимое передается клиенту и жизненный цикл запроса прекращается.
Для того, чтобы разрабатывать веб-приложения на основе ASP.NET MVC Framework необходимо загрузить соответствующую библиотеку с веб-сайта Microsoft. После установки этой библиотеки в составе Visual Studio появится дополнительный тип проекта – ASP.NET Web Application.
После создания нового приложения ASP.NET MVC Framework будет создана заготовка проекта, который имеет следующую структуру:
Как видно, проект ASP.NET MVC Framework имеет строго определенную структуру папок, в рамках которых размещаются соответствующие программные компоненты.
Обычно при разработке приложений на основе ASP.NET MVC Framework следующие папки содержат программные компоненты:
- в папке "Controllers" размещаются все контроллеры, которые доступны в рамках приложения;
- в папке "Models" содержатся все объекты бизнес-логики;
- в папке "Views" содержаться все представления (страницы).
Кроме того, в составе приложения имеются дополнительные папки, которые содержат вспомогательные элементы:
- папка "Content" содержит таблицы стилей (CSS), изображения и другие элементы, необходимые для генерации пользовательского интерфейса приложения;
- папка "Scripts" содержит программный код на языке JavaScript, который выполняется в браузере на стороне клиента.
Таким образом, платформа ASP.NET MVC Framework стала дополнительной альтернативой ASP.NET Web Forms, которую можно использовать при разработке приложений на базе ASP.NET.
Краткие итоги
ASP.NET MVC Framework – это новая технология, которая является альтернативой подходу ASP.NET Web Forms. В рамках ASP.NET MVC Framework разработка ведется на основе шаблона проектирования "Model-View-Controller". Благодаря этому весь программный код разделяется на модель (бизнес-логику), представление (правила генерации кода HTML) и контроллер (правила обработки пользовательского ввода). Такое разделение позволяет снизить связность компонентов системы, что положительно влияет на качество разрабатываемого программного кода.