Введение в ASP.NET MVC

advertisement
Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных
технологий физического факультета Донецкого национального университета
Технологии
разработки Internetприложений
ASP.NET MVC Framework –
новая платформа Web-приложений
вместо ASP.NET Web-Forms
проф. В.К.Толстых, www.tolstykh.com
Схема MVC (Model-View-Controller)
Архитектура ASP.NET MVC Framework делит web-приложение на три разных объекта:
1.
2.
3.
Контроллер получает входные данные (HTTP-запрос), осуществляет их предварительную обработку и
выбирает модель бизнес-логики реализации запроса клиента. Далее, принимает результаты работы
бизнес-логики приложения и выбирает тип представления этих результатов клиенту;
Модель содержит бизнес-логику приложения. В ней находятся классы, которые манипулируют с
данными, записывают их в базу… Модель не зависит ни от Представления ни от Контроллера;
Представление оформляет полученный результат в HTML-коде. Здесь MVC больше похож на
классический ASP, чем на ASP.NET, например, <%= ViewData["Name"] %>. Представления MVC
отвечают только за порождение выходных данных. Обработчики событий и сложные элементы
управления (как в Web-формах) им попросту ни к чему.
Ход обработки запросов для такой архитектуры показан на рисунке:
Рассматриваемая архитектура подразумевает, что изменения в любом из компонентов оказывают минимальные
воздействия на остальные части.
Результат применения MVC
 Уменьшается зависимость между частями приложения, что увеличивает его гибкость;
 Появляется возможность разрабатывать тесты для компонентов приложения, т.е. использовать технику
разработки через тестирования (Test-Driven Development или сокращенно TDD).
Типичные ошибки, при использовании MVC
Контроллер перегружен бизнес-логикой Модели
Некоторые разработчики ошибочно трактуют Модель только как средство доступа к базе данных. В
результате бизнес-логика переходит в Контроллер, что в корне противоречит архитектуре MVC. Стоит
помнить, что Модель это не только доступ к данным, но и логика приложения, проверка получаемых от
пользователя данных и т. д. В свою очередь, Контроллер – связующее звено между Моделью,
Представлением и пользователем.
Модель перегружена логикой пользовательского Представления
Другим заблуждением является попытка перенести всю логику в Модель. Подобную ошибку часто можно
встретить при разработке Web-приложений. В этом случае Представление стараются превратить в
простой шаблон, доступный для редактирования любому верстальщику. При этом логика элементов
пользовательского интерфейса из Представлений перемещается в Модель или, иногда, в Контроллер.
Данный подход ошибочен с точки зрения архитектуры MVC, т.к. нарушается четкое разделение компонентов:
Модель становится зависима от Представления. При правильном подходе, Логика пользовательского
интерфейса должна находиться в Представлениях. Но при этом важно корректно разделить ее и бизнеслогику.
Создание MVC Web Application
Пример создания первого приложения ASP.NET MVC хорошо описан в
http://habrahabr.ru/post/176001/
Получаем проект в виде, показанном на рисунке. Здесь директории:
Properties — содержит настройки проекта.
References — ссылки на другие сборки, проекты и т.д.
App_Data — специальная директория для хранения данных,
App_Start — набор статичных классов, вызываемых в Global.asax. Эти
статичные классы содержат логику инициализации приложения,
выполняющуюся при запуске.
Content — в этой директории мы будем хранить изображения, стили и
тому подобное. Весь статический контент сайта,
Controllers — классы, отвечающие за компоненты Controller,
Models — классы с логикой проекта,
Scripts — библиотеки скриптов jQuery…,
Views — непосредственно пользовательский интерфейс приложения. В
этой директории создаются поддиректории для каждого контроллера
(Views/Home в нашем случае). И уже в них по .aspx-странице для
каждого из методов контроллера,
Views/Shared — содержит то, что может пригодиться для всех
контроллеров, например MasterPages и UserControls.
Добавляем контроллер с именем HomeController
В контроллере, для метода (действия) Index
добавляем представление с общим шаблоном
~Views/Shared/_Layout.cshtml
Результат работы первого приложения
Добавим в конец файла Представления следующие строки:
<= результат работы. Здесь мы использовали синтаксис Razor, удобный для
работы с Представлением.
Razor
Веб-страницы с синтаксисом Razor являются альтернативой веб-формам ASP.NET. Код Razor выполняется на
сервере до отправки страницы в браузер. Он динамически генерирует разметку HTML и передаёт её в
браузер вместе с остальным статическим HTML-кодом страницы. Расширение файла веб-страницы с
содержимым Razor для языка C# — это .cshtml.
Обратите внимание (см. предыдущий слайд) на начало области кода в Razor – это символ @. В отличии от
классических скобок ASP <% %>, Razor не требует явно закрывать область кода. Конец области Razor-кода
распознаётся автоматически.
С символа @ начинаются встроенные выражения Razor, блоки из отдельных инструкций, а также блоки из
нескольких инструкций @{ }. Этот символ отделяет разметку HTML от исполняемого серверного кода.
Мы можем создавать блоки кода в Представлении, создавать там переменные так же, как и в файле кода C#:
@{
string head = "Привет мир!!!";
head = head + " Добро пожаловать на сайт!";
}
<h3>@head</h3>
<h4>@DateTime.Now.ToShortTimeString()</h4>
В Visual Studio 2012 можно создавать как проект, так и веб-сайт ASP.NET с использованием Razor.
ASP.NET MVC
Сильные стороны:
• Полный контроль над генерируемым HTML-кодом. Генерирует «чистый» HTML-код;
• Лучшее разделение между UI и кодом (логикой приложения и логикой представления);
• Проще для unit-тестирования;
• Поддерживает множество различных движков представления (View Engines);
• По умолчанию использует REST-подход для URL'ов — что также хорошо для SEO;
• Нет ViewState (это также может быть и недостатком в определенных случаях);
• Обычный размер загружаемой страницы — маленький;
• Простая интеграция с фреймворками типа JQuery.
Слабые стороны:
• Не основан на серверных событиях, так что может быть сложноватым для освоения теми, кто мыслит
моделью WebForms. Требует больше времени для начала продуктивной работы с ним;
• Количество библиотек контролов и компонентов сторонних производителей небольшое;
• Нет ViewState.
Возможности:
• Позволяет использовать подход Test Driven Development (TDD) — фреймворк построен по большей
части с акцентом на TDD, так что с MVC куда проще писать юнит-тесты;
• Позволяет повторно использовать модель приложения с другими UI-интерфейсами и приложениями.
- По настоящему сильные стороны.
ASP.NET Forms
Сильные стороны:
• Отличные возможности для RAD (Rapid Application Development, быстрая разработка приложений);
• Отличная поддержка «дизайнера» в Visual Studio;
• Простота разработки бизнес-приложений, работающих с большими объемами данных и завязанных на
данных;
• Огромное количество третьих компаний, предоставляющих готовые библиотеки контролов, а также
осуществляющие поддержку проектов на WebForms;
• Привычная Windows Forms-разработчикам концепция событий (серверные события для UI), что позволяет
быстро начать работать с таким подходом.
Слабые стороны:
• Логика UI тесно связана с кодом и таким образом, сложно отделима. Сложно применять к одному
приложения разные UI;
• Сложно производить unit-тистирование, таким образом сложно использовать подход TDD;
• Большой размер страниц, если использовать (не отключать) ViewState.
Возможности:
• Отлично подходит для быстрого создания бизнес-приложений, особенно с большими базами данных.
Прощайте, Web-формы?
ASP.NET MVC сейчас становится модным трендом компании Microsoft. Кроме основного
положительного фактора MVC – отделение бизнес-логики приложения от визуализации,
есть мнение, что Microsoft тем самым «перетащила» на свою сторону некоторую часть
разработчиков PHP и других аналогичных конкурирующих платформ.
Со временем платформа MVC, вероятно, догонит Web-формы по уровню сложности
элементов управления, но вряд ли когда-то с ней будет так же просто начать работать, как
с Web-формами, в которых большинство действий сводится к перетаскиванию элементов.
Но между тем, платформа ASP.NET MVC предлагает Web-разработчикам совершенно
новый способ создания приложений в Microsoft .NET Framework. Она станет отличным
дополнением к Web-формам в том случае, когда разработчику требуется полный контроль
над Web-приложением.
Download