Из цикла лекций «Технологии разработки 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-приложением.