Разработка веб-приложений с использованием 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 http://svr/Product/EditProduct/3 Сервер Products.aspx (View) HomeController (Controller) EditProduct .aspx (View) Product (Model) SQL Жизненный цикл запроса Запрос Таблица маршрутов Контроллер Ответ (разметка) Представление Действие контроллера Как MVC выглядит? 2 Контроллер 3 Модель 4 Представление 1 Таблица маршрутизации Каков процесс разработки? 1. Создать модель – определить структуры данных 2. Описать физическую структуру приложения маршрутами 3. Создать контроллеры и их действия 4. Создать представления 5. Разработать unit-тесты Пойдем по порядку… Маршруты • Задаются в Global.asax • Поддерживают регулярные выражения • Механизм может быть переопределен 1 http://srv/Home/Products/2 2 Маршруты • Маршрут будет использован, только если 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