0bc5967ed5999db65cb24d987121a767.ppt
- Количество слайдов: 17
Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4 -го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета Технологии разработки Internetприложений ASP. NET MVC Framework – новая платформа Web-приложений Версия DOT. NET 4. 0 и выше проф. В. К. Толстых, www. tolstykh. com
Схема MVC (Model-View-Controller) Архитектура ASP. NET MVC Framework делит web-приложение на три разных объекта: 1. 2. 3. Контроллер получает входные данные (HTTP-запрос), осуществляет их предварительную обработку и выбирает модель бизнес-логики реализации запроса клиента. Далее, принимает результаты работы бизнес-логики приложения и выбирает тип представления этих результатов клиенту; Модель содержит бизнес-логику приложения. В ней находятся классы, которые манипулируют с данными, записывают их в базу… Модель не зависит ни от Представления ни от Контроллера; Представление оформляет полученный результат в HTML-коде. Здесь MVC больше похож на классический ASP, чем на ASP. NET. Представления MVC отвечают только за порождение выходных данных. Обработчики событий и сложные элементы управления (как в Web-формах) здесь отсутствуют. Ход обработки запросов для такой архитектуры показан на рисунке: Рассматриваемая архитектура подразумевает, что изменения в любом из компонентов оказывают минимальные воздействия на остальные части.
Результат применения MVC v Уменьшается зависимость между частями приложения, что увеличивает его гибкость; v Появляется возможность разрабатывать тесты для компонентов приложения, т. е. использовать технику разработки через тестирования (Test-Driven Development или сокращенно TDD). Типичные ошибки, при использовании MVC Контроллер перегружен бизнес-логикой Модели Некоторые разработчики ошибочно трактуют Модель только как средство доступа к базе данных. В результате бизнес-логика переходит в Контроллер, что в корне противоречит архитектуре MVC. Стоит помнить, что Модель это не только доступ к данным, но и логика приложения, проверка получаемых от пользователя данных и т. д. В свою очередь, Контроллер – связующее звено между Моделью, Представлением и пользователем. Модель перегружена логикой пользовательского Представления Другим заблуждением является попытка перенести всю логику в Модель. Подобную ошибку часто можно встретить при разработке Web-приложений. В этом случае Представление стараются превратить в простой шаблон, доступный для редактирования любому верстальщику. При этом логика элементов пользовательского интерфейса из Представлений перемещается в Модель или, иногда, в Контроллер. Данный подход ошибочен с точки зрения архитектуры MVC, т. к. нарушается четкое разделение компонентов: Модель становится зависима от Представления. При правильном подходе, Логика пользовательского интерфейса должна находиться в Представлениях. Но при этом важно корректно разделить ее и бизнес-логику.
Создание MVC Web Application Пример создания первого приложения ASP. NET MVC хорошо описан в http: //habrahabr. ru/post/176001/, http: //metanit. com/sharp/mvc 5/2. 1. php Получаем проект в виде, показанном на рисунке. Здесь директории: Properties — содержит настройки проекта. References — ссылки на другие сборки, проекты и т. д. App_Data — специальная директория для хранения данных, App_Start — набор статичных классов, вызываемых в Global. asax. Эти статичные классы содержат логику инициализации приложения, выполняющуюся при запуске. Content — в этой директории мы будем хранить изображения, стили и тому подобное. Весь статический контент сайта, Controllers — классы, отвечающие за компоненты Controller, Models — классы с логикой проекта, Scripts — библиотеки скриптов j. Query…, Views — непосредственно пользовательский интерфейс приложения. В этой директории создаются поддиректории для каждого контроллера (Views/Home в нашем случае). И уже в них по. aspx-странице для каждого из методов контроллера, Views/Shared — содержит то, что может пригодиться для всех контроллеров, например Master. Pages и User. Controls.
Пример 1 • Добавляем контроллер с именем Home. Controller. • Создаём метод (действие) Action. Result для представления в файле Index. schtml. o В Action. Result указываем объект View. Bag, который позволяет задавать любые переменные (в примере – Message), а затем в представлении извлекать их значения. • Создаём файл представления Index. schtml (C#, Razor см. след. слайд) в папке контроллера Home каталога представлений Views. (см. пред. слайд).
Razor Веб-страницы с синтаксисом Razor являются альтернативой веб-формам ASP. NET. Код Razor выполняется на сервере до отправки страницы в браузер. Он динамически генерирует разметку HTML и передаёт её в браузер вместе с остальным статическим HTML-кодом страницы. Расширение файла веб-страницы с содержимым Razor для языка C# — это. cshtml. Обратите внимание (см. предыдущий слайд) на начало области кода в Razor – это символ @. В отличии от классических скобок ASP <% %>, Razor не требует явно закрывать область кода. Конец области Razor-кода распознаётся автоматически. С символа @ начинаются встроенные выражения Razor, блоки из комплексных выражений — @( ), а также блоки из нескольких инструкций — @{ }. Этот символ отделяет разметку HTML от исполняемого серверного кода. Мы можем создавать блоки кода в представлении, создавать там переменные так же, как и в файле кода C#: @{ string head = "Привет мир!"; head = head + " Добро пожаловать на сайт!"; int number = 1; } <h 3>@head</h 3> <h 4>@Date. Time. Now. To. Short. Time. String()</h 4> <p>Сообщение: @("Число = " + number)</p> Начиная с Visual Studio 2012 можно создавать как проект, так и веб-сайт ASP. NET с использованием Razor.
Основы маршрутизации Чтобы обратиться к контроллеру Home. Controller или отправить ему запрос, нам надо указать в строке запроса его имя – Home. Кроме того, после имени контроллера надо через слеш указать действие или метод контроллера, к которому отправляется запрос. По умолчанию при запуске проекта или при обращении к сайту система MVC будет вызывать действие Index контроллера Home. Controller. Например, путь /Home/Buy означает, что мы будем обращаться к методу Buy контроллера Home. Controller. Если метод Buy может принимать параметр, то в запросе можно указать его значение, например, <a href="/Home/Buy/2">Купить</a>. По этой ссылке контроллер будет получать запрос к действию Buy, передавая ему в качестве параметра значение 2. Определения маршрутов находятся в файле Route. Config. cs, папки App_Start (см. след. слайд).
Настройка маршрута Имя маршрута Шаблон строки запроса Маршрут по умолчанию Необязательный параметр для GET запросов При получении запроса механизм маршрутизации парсит строку URL и помещает значения маршрута в словарь - в объект Route. Value. Dictionary, доступный через контекст приложения Request. Context. В качестве ключей в нем применяются имена параметров URL, а соответствующие сегменты URL выступают в качестве значений. Параметр controller action id Значение Home Index 5 Например, у нас есть следующий URL запроса: http: //localhost/Home/Index/5, то в этом случае образуются следующие пары ключей и значений в словаре Route. Value. Dictionary.
Результат работы приложения Добавим в конец файла представления следующие строки: <= результат работы. Здесь мы использовали синтаксис Razor, удобный для работы с представлением.
Пример 2 Организуем передачу от клиента параметров методом GET по ссылке «Купить» . Здесь каждый товар идентифицирован своим id. Каждая строка «Купить» для товара имеет маршрутизацию к файлу Buy. schtml с параметром id-товара: href="/Home/Buy/id", все id товаров заполняются автоматически из массива ID, который формируется в контроллере Home. Controller. Один контроллер Home. Controller имеет два представления.
Контроллер магазина Заполнение магазина товарами вынесено в бизнес-процессы модели магазина – в класс MVC. Models. My. Model (см. след. слайд). В корзину представления View. Bag заносится массив id товаров из объекта модели bag 1. mass. Id.
Модель магазина Модели представляют собой простые классы и располагаются в проекте в каталоге Models. Нажмем на эту папку правой кнопкой мыши и в появившемся меню выберем Add->Class. . Назовем новый класс My. Model и добавим в него указанный код.
Ответ магазина Мы получили ответ от представления Buy (файл Buy. cshtml), в которое был передан параметр id=103, от контролера Home. Controller (файл Home. Controller. cs), который в свою очередь получил этот параметр методом GET от первого представления Index (файл Index. cshtml).
ASP. NET MVC Сильные стороны: • Полный контроль над генерируемым HTML-кодом. Генерирует «чистый» HTML-код; • Лучшее разделение между UI и кодом (логикой приложения и логикой представления); • Проще для unit-тестирования; • Поддерживает множество различных движков представления (View Engines); • Позволяет повторно использовать модель приложения с другими UI-интерфейсами и приложениями. • По умолчанию использует REST-подход для URL'ов — что также хорошо для SEO; • Нет View. State (это также может быть и недостатком в определенных случаях); • Обычный размер загружаемой страницы — маленький; • Простая интеграция с фреймворками типа JQuery. — по настоящему сильные стороны. Однако и они могут реализовываться другими современными технологиями сервис-ориентированного программирования. Слабые стороны: • Не основан на серверных событиях, так что может быть сложноватым для освоения теми, кто мыслит моделью Web. Forms. Требует больше времени для начала продуктивной работы с ним; • Количество библиотек контролов и компонентов сторонних производителей небольшое; • Нет View. State.
ASP. NET Forms Сильные стороны: • Отличные возможности для RAD (Rapid Application Development, быстрая разработка приложений); • Отличная поддержка «дизайнера» в Visual Studio; • Простота разработки бизнес-приложений, работающих с большими объемами данных и завязанных на данных; • Огромное количество третьих компаний, предоставляющих готовые библиотеки контролов, а также осуществляющие поддержку проектов на Web. Forms; • Привычная разработчикам Windows Forms-концепция событий (серверные события для UI), что позволяет быстро начать работать с таким подходом. Слабые стороны: • Логика UI тесно связана с кодом и таким образом, сложно отделима. Сложно применять к одному приложения разные UI; • Сложно производить unit-тистирование; • Большой размер страниц, если использовать (не отключать) View. State. Windows Forms отлично подходит для быстрого создания бизнес-приложений, особенно с большими базами данных.
Прощайте, Web-формы? ASP. NET MVC сейчас становится модным трендом компании Microsoft. Кроме основного положительного фактора MVC – отделение бизнес-логики приложения от визуализации, есть мнение, что Microsoft тем самым «перетащила» на свою сторону некоторую часть разработчиков PHP и других аналогичных конкурирующих платформ, использующих изначально MVC, а не Forms. Со временем платформа MVC, вероятно, догонит Web-формы по уровню сложности элементов управления, но вряд ли когда-то с ней будет так же просто начать работать, как с Web-формами, в которых большинство действий сводится к перетаскиванию элементов. Но между тем, платформа ASP. NET MVC предлагает Web-разработчикам совершенно новый способ создания приложений в Microsoft. NET Framework. Она станет отличным дополнением к Web-формам в том случае, когда разработчику требуется полный контроль над Web-приложением.
Рекомендуемая литература 1. Руководство по ASP. NET MVC 5. – Сайт о программировании METANIT. COM. – http: //metanit. com/sharp/mvc 5/ 2. ASP. NET MVC. – Сайт Хабрахабр. – https: //habrahabr. ru/post/175999/
0bc5967ed5999db65cb24d987121a767.ppt