Разработка веб-приложений с использованием ASP.NET MVC Framework
Гайдар МагдануровMicrosoftЕвгений АгафоновABBYY
Почему я здесь?Желаю:• быстрее разрабатывать веб-приложения• полнее тестировать логику приложения• проще вносить изменения• иметь полный контроль над разметкой
Сомневаюсь:• Web Forms, MVC, Свой Framework?• JavaScript, UpdatePanel, Silverlight?• BMW, Ferrari, Лада «Калина»?
О чем поговорим?• Обзор шаблона проектирования MVC• Обзор проекта MVC Framework• Возможности MVC Framework–Маршруты–Фабрика контроллеров– Внедрение зависимостей–Фильтры действий (кеш, безопасность и
др.)– Обновление моделей– Валидация данных– Строгая типизация представления– Возможности на стороне клиента
Model-View-Controller?• Впервые описан в 1979 году• Предназначен для отделения бизнес
логики от интерфейса представления
• Реализаций огромное множество:ASP.NET MVC, Maverick.NET, Monorail, ProMesh.NET, PureMVC, Mach-II, Model-Glue, FuseBox, Aranea, Cocoon, Grails, GWT, Spring, Struts, Stripes, Tapestry, WebObjects, Wicket, JSF, SproutCore, Wawemaker, Dojo, Catalyst, CGI:Application, Solstice, Gantry, CakePHP, Joomla, Odin Assemble, Prado, Solar, Zand Framework, Symfony, Django, Pylons, Enthought, Zope, web2py, Camping, Merb, Nitro, Ramaze, Ruby on Rails, XForms
Model-View-Controller?
• Model — данные и валидация• View — отображение интерфейса• Controller — взаимодействие с
пользователем
Model
View Controller
И чем же он хорош, этот MVC?• Сродство к веб-приложениям– Запрос пришел, его обработали, вернули
результат– Веб многолик и представлений может
быть много• Простой подход к разработке– Система сложна настолько, насколько
этого хочет разработчик– Полный контроль над представлением
• Основные парадигмы:– Разделение проблем (SoC)– Простота тестирования логики (TDD)
Проект ASP.NET MVC?• ASP.NET MVC Framework 1.0 Beta– Доступен с исходным кодом– http://www.codeplex.com/aspnet
• ASP.NET MVC Contrib– Проект сообщества разработчиков–Множество готовых компонентов– http://www.codeplex.com/MVCContrib
В чем отличие от Web Forms?
Теряем:• Postback и жизненный цикл страницы• События, контролы и Viewstate• Сложные вопросы для интервью
Приобретаем:• Гибкую инфраструктуру• Полный контроль над разметкой• Автоматическое тестирование
Как MVC работает?
Браузер Серверhttp://srv/Product/Categories/2
HomeController(Controller)
Product(Model) SQL
EditProduct.aspx
(View)
http://svr/Product/EditProduct/3
Products.aspx
(View)ViewData
ViewData
Жизненный цикл запроса
Запрос Таблица маршрутов
Контроллер
Действие контроллера
Представление
Ответ (разметка)
Как MVC выглядит?
1
2
3
4
Таблица маршрутизации
Контроллер
Модель
Представление
Каков процесс разработки?
1. Создать модель – определить структуры данных
2. Описать физическую структуру приложения маршрутами
3. Создать контроллеры и их действия
4. Создать представления5. Разработать unit-тесты
Пойдем по порядку…
Маршруты
http://srv/Home/Products/2
1
2
• Задаются в Global.asax• Поддерживают регулярные
выражения• Механизм может быть
переопределен
Маршруты
• Маршрут будет использован, только если date удовлетворяет формату
NN-NN-NNNN
Маршруты• Возможность создания
собственных условий для маршрутов– Аутентификация, переменные
окружения и любые другие условия
Тестирование маршрутов• Стандартный unit-тест
Тестирование маршрутов• С использованием своего
механизма маршрутизации• Проект RouteTester Фила Хаака
Контроллер• Обработка запросов и
взаимодействие с моделью• Параметры метода связываются
автоматически
Связывание параметров метода• По названию переменной и поля
формы• Конструирование сложных по
названиям полей формы и свойств объекта
Управление связыванием• Возможность включить и
исключить свойства при конструировании объектов
Обновление модели• Методы UpdateModel и
TryUpdateModel• Ограничения - whitelist интерфейс
Фильтры• ActionFilter - выполнение некоторой
предварительной операции• AcceptVerbsAttribute– Ограничения по типа зупроса
Пример ActionFilter• Сжатие
Фабрика контроллеров• Возможность определить свою
фабрику, создающую контроллеры• Определение удобной
инфраструктуры контроллерам
Представление• Автономность• Возможность замены движка• Раннее или позднее связывание с
моделью
Типизация• Строгая – через ViewData.Model• Не строгая – коллекция ViewData[]• Поиск в коллекции, затем в Model
через вызов ViewData.Eval()
Валидация• Механизм ModelState
Замена движка представления• Минимум кода
AJAX• Форма в стиле UpdatePanel– Возможно, но не без ручного кода
JSON, XML?• JsonResult для возвращения JSON
Демонстрация
Простой MVC чат
Вопросы?
Ищите нас во всех магазинах городаНа стенде «Спроси экперта» и на круглом столе «Веб-технологии Microsoft для разработчиков»
1.Заполните анкету: http://platforma2009.ru/Eval.aspx Терминалы - холлы конференции и интернет-кафе на 1 этаже
2.Чтобы участвовать в розыгрыше призов
3.Результаты – на сайте конференции и в голосовых объявлениях после розыгрышей в 14:30, 16:00, 17:30 и 19:00
Не забывайте заполнять анкеты по докладамВаше мнение очень важно!
Подробная информация по заполнению анкет – на сайте конференции
Запись доклада на www.platforma2009.ru