SlideShare une entreprise Scribd logo
1  sur  29
Андрей Кулешов




ASP.NET, MVC,
ASP.NET MVC
История, паттерны, реализация
История
▪ В 1991 появляется первый стандарт языка разметки HTML – Hyper Text
  Markup Language
▪ В следующее десятилетие наблюдается взрывной рост количества веб-
  серверов (как программного обеспечения, так и машин, обслуживающих
  запросы), веб-браузеров, веб-стандартов
▪ От серверов, отдающих статическое содержимое (файлы на жестком диске)
  – к динамическому содержимому (когда возвращаемый результат был
  результатом работы программы)
▪ Январь 2002 – релиз ASP.NET Web Forms (вместе с .NET как таковым)
Почему перестало хватать Web Forms?
▪ ASP.NET – хорошая программная платформа, созданная десятилетие назад
• Одно из декларированных преимуществ – не нужно учить HTML – мы кидаем на
  страницу контролы (привет, разработчики Visual Basic) и всѐ автомагически
  происходит на сервере
• Потому что в далекие времена ничего хорошего на клиенте происходить не
  могло
• Высокая сложность клиентского кода – у каждого браузера свой диалект
  JavaScript (он же LiveScript, он же JScript, и всѐ это станет стандартом
  ECMAScript), своя DOM, и нет никаких распространенных фреймворков,
  позволяющих абстрагироваться от этих различий
• Обмен данными между клиентом и сервером идѐт строго по схеме GET – POST
  (и разработчикам Web Forms даже не надо знать этих слов)
Что случилось?
▪ AJAX
▪ Стандартизация
▪ JavaScript фреймворки (jQuery, Yahoo)
▪ Расширение возможностей браузеров
▪ Распространение unit-тестирования
Люди, желавшие странного...
▪ Лучший контроль над генерируемой HTML-разметкой
▪ Лучшие возможности для создание скриптов на клиенте
▪ Больше возможностей для юнит-тестирования логики
Демо
MVC для ASP.NET своими руками
Единая точка входа запросов
▪ Все запросы перенаправляются на центральный IHttpHandler
▪ Если по запрошенному пути существуют физический файл на диске, то
  сервер возвращает этот файл
▪ Иначе – запрос обрабатывается согласно правилам роутинга
Сферический MVC в ваакуме
▪ Model-view-controller (MVC, «Модель-представление-поведение», «Модель-
  представление-контроллер») — архитектура программного обеспечения, в которой
  модель данных приложения, пользовательский интерфейс и управляющая логика
  разделены на три отдельных компонента, так, что модификация одного из компонентов
  оказывает минимальное воздействие на другие компоненты.

• Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на
  запросы (обычно от контроллера), изменяя своѐ состояние.

• Представление (View). Отвечает за отображение информации (пользовательский
  интерфейс).

• Контроллер(Controller). Интерпретирует данные, введѐнные пользователем, и
  информирует модель и представление о необходимости соответствующей реакции.

- модель независима от визуального представления

- для одной и той же модели можно создавать различные представления
Явление ASP.NET MVC народу
▪ Прототип придуман в феврале 2007 года Скоттом Гуфри, на борту самолета,
  на котором тот летел на конференцию на восточное побережье США
▪ Впервые показан в октябре 2007 года, где вызвал интерес и желание
  продолжать
▪ ASP.NET MVC CTP – декабрь 2007
▪ Первый релиз в марте 2009
▪ Последний стабильный релиз – MVC 4 – август 2012 г.
Демо
Проект ASP.NET MVC
Separation of Concerns
Разделение ответственности
Предназначено для того, чтобы сделать код более
Configuration over Convention
▪ Есть ряд простых правил (именования файлов и классов, размещения их
  внутри папок), следуя которым, вы просто подключаете ваш код (или
  разметку) к инфраструктуре MVC, и не выполняете никакого
  дополнительного конфигурирования
▪ Например – все контроллеры должны реализовывать интерфейс IController
  (условие, необходимое для работы), находиться в папке Controllers иметь
  постфикс имение Controller (конвенции, позволяющие обойтись без их
  явного конфигурирования)
ASP.NET MVC – это тот же ASP.NET
▪ То есть стоит на плечах гигантов...

▪ Единая среда для Web Forms и MVC
▪ Одно и то же программное окружение
   – Один и тот же набор модулей для аутентификации, кэширования,
     хранения сессий
   – Централизованный HTTP хэндлер, отдающий все ресурсы
• Возможность работы бок о бок
   – Классические Web Forms и ASP.NET MVC могут работать внутри
     одного и того же проекта
Controllers
▪ Задачи контроллера – это принять данные от пользователя и обработать их,
  или, наоборот, подготовить данные для отправки пользователю
▪ Содержит множество (возможно, пустое )Actions
▪ Как правило – сгруппированных по смыслу
▪ Каждый Action возвращает информацию, содержащую:
  - модель (model)
  - данные для выбора представления (View)
Model
▪ Класс. Просто класс. Plain Old Class Object, он же POCO. Других особых
  требований к нему нет.
▪ С точки зрения Best Practices существует два подхода:
  - пишем для Action-ов свои классы, описывающие минимально необходимую
  сущность (public class HumanViewModel)
  - используем классы из доменной модели нашего приложения, например,
  сгенерированные Entity Framework и имеющие маппинги на базу данных
▪ (автор является строгим приверженцем первого подхода)

▪ Однако модель может быть декорирована атрибутами, описывающими еѐ и
  автоматически включающими клиентскую и серверную валидацию
▪ (хотя с тем же успехом к ней может быть создана парная мета-модель... Но это уже совсем отдельная тема)
Views
▪ Отвечают за преобразование данных (модели) в браузерочитаемую
  разметку
▪ Использование ASPX/ASCX – только потому, что мы уже умеем на них
  писать
▪ Это не полноценная страница (Page) – это шаблон. У него нет жизненного
  цикла, у него вообще жизни нет.
▪ Единственная цель остается той же – получить строку с HTML внутри
▪ Возможность подключения кастомизированных View Engine, начиная с
  первой версии
▪ Поддерживаемый Microsoft ViewEngine Razor начиная с третьей версии
  ASP.NET MVC
Cтандартный механизм View
▪ Pure HTML
▪ HTML.* helpers
▪ AJAX.* helpers
▪ URL.* helpers
▪ <%= … %> vs <%: … %> vs <% %> vs @... vs @{ … }
▪ Повторное использование кода и разметки – пользовательские контролы
Rich User Interface
▪ Легкость взаимодействия с JavaScript – разметка не меняется после
  серверной обработки
▪ jQuery в коробке, поддерживается Microsoft
▪ Легкость AJAX-взаимодействия с сервером – можно обращаться напрямую к
  Action
▪ Встроенные AJAX.* helpers (начиная с версии 3 используют jQuery, а не
  собственные библиотеки Microsoft)
▪ Обмен данными в форматах plain HTML, JSON, JavaScript
▪ Благодаря этому – повторное использование серверных контролов в
  клиентском коде без многократных перегрузок страниц
Unobtrusive JavaScript
▪ Разделение обязанностей – HTML отдельно, JavaScript отдельно
▪ HTML-5 style
  <input type=―text‖ data-valid=―true‖ value=―Привет‖/>
▪ AJAX.* и валидация данных используют этот подход,
  начиная с версии 3
▪ Значительно упрощает получение HTML через ajax-запрос
▪ Значительно упрощает кастомизацию
▪ Значительно увеличивает читаемость кода
Валидация данных
▪ Декларативное объявление атрибутов валидности
▪ Атрибуты ассоциированны с самой моделью
▪ Если модель недоступна (например, сгенерирована) – можно создать для
  неѐ класс – поставщик метаданных
▪ Единая модель валидации для клиента и сервера
▪ Начиная с MVC 3 – jquery.validation как движок клиентской валидации
▪ Декларативный HTML-5 стиль на клиенте – легкость работы с AJAX
URL mapping
▪ Сопоставляет пришедший запрос с контроллером, методом
▪ Служит одним из источником параметров Action-ов
▪ User-friendly URL
Сильно упрощенная схема генерации ответа

     User Request
                         IIS handles request   Routing Module   MVCRouteHandler
    http://getdev.net




                                                                View Engine – look
    Controller Factory       Controller            Action
                                                                     for view




   Execute View to get    Send response
        markup           back to user agent
Как в контроллеры приходят параметры?
Концепция Model Binders
•   Заполнение модели сырыми данными из формы, запроса и прочих источников
    данных, пришедших от пользователя – НЕ работа контроллера
    Это нарушило бы принцип Single Responsibility
•   Для любой модели можно определить класс, который ей конструирует,
    глобально или на уровне отдельного метода
Default Model Binder
•   ValueProvider: данные из формы, данные из строки запроса
•   Сопоставление данных со свойствами модели происходит по имени
•   Угадайте механизм .NET, который позволяет это делать
                                                           Reflection
Areas
▪ Средство для разбиения одного большого сайта на несколько почти
  независимых маленьких
▪ Каждая Area имеет свой набор контроллеров, View и (опционально) моделей
▪ Типичный пример – одна Area для обычных пользователей, другая – для
  администраторов
Action Filters
▪ Фильтр операции (action filter) — это атрибут, который позволяет
  декларативно подключать к запрошенной операции некое поведение.
▪ IActionFilter - Методы этого интерфейса вызываются до и после выполнения
  метода контроллера
▪ IAuthorizationFilter - Методы этого интерфейса вызываются до выполнения
  метода контроллера
▪ IExceptionFilter - Методы этого интерфейса вызываются всякий раз, когда при
  выполнении метода контроллера генерируется исключение
▪ IResultFilter - Методы этого интерфейса вызываются до и после обработки
  результата операции
Dependency Injection
▪ В соответствии с первоначальной задумкой, в ASP.NET MVC предусмотрено
  множество мест, в которых можно перехватывать или заменять фукнционал
  фреймворка, не используя грязных хаков
▪ Наиболее популярные заменяемые части:
  - инстанциирование контроллеров
  - View Engine
  - Model Binder
▪ Всего же мест для замены стандартных частей фреймворка в ASP.NET MVC
  4 порядка полутора десятков
Интересное чтение
▪ Pro ASP.NET MVC 3 Framework by Steven Sanderson & Adam Freeman
▪ Professional ASP.NET MVC 4 by Phil Haack and many, many others
▪ http://www.asp.net/mvc
▪ Фильтры операций в ASP.NET MVC от Дино Эспозито
Интересное видео
▪ http://www.mvcconf.com/ - онлайн-конференция, посвященная ASP.NET MVC
▪ ASP.NET MVC For Web Forms developers by Dino Esposito
Вопросы?
                 Внимательно слушаю! 


Андрей Кулешов

kaa-tula@ya.ru
    akuleshov.tula




Специально для http://GetDev.NET

Contenu connexe

Similaire à ASP.NET, MVC, ASP.NET MVC

C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.Igor Shkulipa
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхMagecom Ukraine
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в MagentoPavel Usachev
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.Igor Shkulipa
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворкиRoman Brovko
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéInterSystems CEE
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...Ilya Kaznacheev
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...WDDay
 

Similaire à ASP.NET, MVC, ASP.NET MVC (20)

ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
Стандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Web application framework
Web application frameworkWeb application framework
Web application framework
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
 
Backbone lesson 1
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
Как пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
 
Разработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
 
ASP.NET MVC 4
ASP.NET MVC 4ASP.NET MVC 4
ASP.NET MVC 4
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...
 

Plus de GetDev.NET

Leap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееGetDev.NET
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистовGetDev.NET
 
Mind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеGetDev.NET
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015GetDev.NET
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
 
Windows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковGetDev.NET
 
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКGetDev.NET
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIGetDev.NET
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013GetDev.NET
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...GetDev.NET
 
Lego Mindstorms
Lego MindstormsLego Mindstorms
Lego MindstormsGetDev.NET
 
Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8GetDev.NET
 
Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложенийGetDev.NET
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language RuntimeGetDev.NET
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиGetDev.NET
 
Roslyn - компилятор как сервис
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервисGetDev.NET
 

Plus de GetDev.NET (20)

Go
GoGo
Go
 
Leap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущее
 
Гирлянда для программистов
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
 
Mind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучше
 
Что нового в Visual Studio 2015
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 
Windows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиков
 
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Что нового в Visual Studio 2013
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013
 
AngularJS
AngularJSAngularJS
AngularJS
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
Lego Mindstorms
Lego MindstormsLego Mindstorms
Lego Mindstorms
 
Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8
 
Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложений
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
JavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработки
 
Roslyn - компилятор как сервис
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервис
 

ASP.NET, MVC, ASP.NET MVC

  • 1. Андрей Кулешов ASP.NET, MVC, ASP.NET MVC История, паттерны, реализация
  • 2. История ▪ В 1991 появляется первый стандарт языка разметки HTML – Hyper Text Markup Language ▪ В следующее десятилетие наблюдается взрывной рост количества веб- серверов (как программного обеспечения, так и машин, обслуживающих запросы), веб-браузеров, веб-стандартов ▪ От серверов, отдающих статическое содержимое (файлы на жестком диске) – к динамическому содержимому (когда возвращаемый результат был результатом работы программы) ▪ Январь 2002 – релиз ASP.NET Web Forms (вместе с .NET как таковым)
  • 3. Почему перестало хватать Web Forms? ▪ ASP.NET – хорошая программная платформа, созданная десятилетие назад • Одно из декларированных преимуществ – не нужно учить HTML – мы кидаем на страницу контролы (привет, разработчики Visual Basic) и всѐ автомагически происходит на сервере • Потому что в далекие времена ничего хорошего на клиенте происходить не могло • Высокая сложность клиентского кода – у каждого браузера свой диалект JavaScript (он же LiveScript, он же JScript, и всѐ это станет стандартом ECMAScript), своя DOM, и нет никаких распространенных фреймворков, позволяющих абстрагироваться от этих различий • Обмен данными между клиентом и сервером идѐт строго по схеме GET – POST (и разработчикам Web Forms даже не надо знать этих слов)
  • 4. Что случилось? ▪ AJAX ▪ Стандартизация ▪ JavaScript фреймворки (jQuery, Yahoo) ▪ Расширение возможностей браузеров ▪ Распространение unit-тестирования
  • 5. Люди, желавшие странного... ▪ Лучший контроль над генерируемой HTML-разметкой ▪ Лучшие возможности для создание скриптов на клиенте ▪ Больше возможностей для юнит-тестирования логики
  • 6. Демо MVC для ASP.NET своими руками
  • 7. Единая точка входа запросов ▪ Все запросы перенаправляются на центральный IHttpHandler ▪ Если по запрошенному пути существуют физический файл на диске, то сервер возвращает этот файл ▪ Иначе – запрос обрабатывается согласно правилам роутинга
  • 8. Сферический MVC в ваакуме ▪ Model-view-controller (MVC, «Модель-представление-поведение», «Модель- представление-контроллер») — архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты. • Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя своѐ состояние. • Представление (View). Отвечает за отображение информации (пользовательский интерфейс). • Контроллер(Controller). Интерпретирует данные, введѐнные пользователем, и информирует модель и представление о необходимости соответствующей реакции. - модель независима от визуального представления - для одной и той же модели можно создавать различные представления
  • 9. Явление ASP.NET MVC народу ▪ Прототип придуман в феврале 2007 года Скоттом Гуфри, на борту самолета, на котором тот летел на конференцию на восточное побережье США ▪ Впервые показан в октябре 2007 года, где вызвал интерес и желание продолжать ▪ ASP.NET MVC CTP – декабрь 2007 ▪ Первый релиз в марте 2009 ▪ Последний стабильный релиз – MVC 4 – август 2012 г.
  • 11. Separation of Concerns Разделение ответственности Предназначено для того, чтобы сделать код более
  • 12. Configuration over Convention ▪ Есть ряд простых правил (именования файлов и классов, размещения их внутри папок), следуя которым, вы просто подключаете ваш код (или разметку) к инфраструктуре MVC, и не выполняете никакого дополнительного конфигурирования ▪ Например – все контроллеры должны реализовывать интерфейс IController (условие, необходимое для работы), находиться в папке Controllers иметь постфикс имение Controller (конвенции, позволяющие обойтись без их явного конфигурирования)
  • 13. ASP.NET MVC – это тот же ASP.NET ▪ То есть стоит на плечах гигантов... ▪ Единая среда для Web Forms и MVC ▪ Одно и то же программное окружение – Один и тот же набор модулей для аутентификации, кэширования, хранения сессий – Централизованный HTTP хэндлер, отдающий все ресурсы • Возможность работы бок о бок – Классические Web Forms и ASP.NET MVC могут работать внутри одного и того же проекта
  • 14. Controllers ▪ Задачи контроллера – это принять данные от пользователя и обработать их, или, наоборот, подготовить данные для отправки пользователю ▪ Содержит множество (возможно, пустое )Actions ▪ Как правило – сгруппированных по смыслу ▪ Каждый Action возвращает информацию, содержащую: - модель (model) - данные для выбора представления (View)
  • 15. Model ▪ Класс. Просто класс. Plain Old Class Object, он же POCO. Других особых требований к нему нет. ▪ С точки зрения Best Practices существует два подхода: - пишем для Action-ов свои классы, описывающие минимально необходимую сущность (public class HumanViewModel) - используем классы из доменной модели нашего приложения, например, сгенерированные Entity Framework и имеющие маппинги на базу данных ▪ (автор является строгим приверженцем первого подхода) ▪ Однако модель может быть декорирована атрибутами, описывающими еѐ и автоматически включающими клиентскую и серверную валидацию ▪ (хотя с тем же успехом к ней может быть создана парная мета-модель... Но это уже совсем отдельная тема)
  • 16. Views ▪ Отвечают за преобразование данных (модели) в браузерочитаемую разметку ▪ Использование ASPX/ASCX – только потому, что мы уже умеем на них писать ▪ Это не полноценная страница (Page) – это шаблон. У него нет жизненного цикла, у него вообще жизни нет. ▪ Единственная цель остается той же – получить строку с HTML внутри ▪ Возможность подключения кастомизированных View Engine, начиная с первой версии ▪ Поддерживаемый Microsoft ViewEngine Razor начиная с третьей версии ASP.NET MVC
  • 17. Cтандартный механизм View ▪ Pure HTML ▪ HTML.* helpers ▪ AJAX.* helpers ▪ URL.* helpers ▪ <%= … %> vs <%: … %> vs <% %> vs @... vs @{ … } ▪ Повторное использование кода и разметки – пользовательские контролы
  • 18. Rich User Interface ▪ Легкость взаимодействия с JavaScript – разметка не меняется после серверной обработки ▪ jQuery в коробке, поддерживается Microsoft ▪ Легкость AJAX-взаимодействия с сервером – можно обращаться напрямую к Action ▪ Встроенные AJAX.* helpers (начиная с версии 3 используют jQuery, а не собственные библиотеки Microsoft) ▪ Обмен данными в форматах plain HTML, JSON, JavaScript ▪ Благодаря этому – повторное использование серверных контролов в клиентском коде без многократных перегрузок страниц
  • 19. Unobtrusive JavaScript ▪ Разделение обязанностей – HTML отдельно, JavaScript отдельно ▪ HTML-5 style <input type=―text‖ data-valid=―true‖ value=―Привет‖/> ▪ AJAX.* и валидация данных используют этот подход, начиная с версии 3 ▪ Значительно упрощает получение HTML через ajax-запрос ▪ Значительно упрощает кастомизацию ▪ Значительно увеличивает читаемость кода
  • 20. Валидация данных ▪ Декларативное объявление атрибутов валидности ▪ Атрибуты ассоциированны с самой моделью ▪ Если модель недоступна (например, сгенерирована) – можно создать для неѐ класс – поставщик метаданных ▪ Единая модель валидации для клиента и сервера ▪ Начиная с MVC 3 – jquery.validation как движок клиентской валидации ▪ Декларативный HTML-5 стиль на клиенте – легкость работы с AJAX
  • 21. URL mapping ▪ Сопоставляет пришедший запрос с контроллером, методом ▪ Служит одним из источником параметров Action-ов ▪ User-friendly URL
  • 22. Сильно упрощенная схема генерации ответа User Request IIS handles request Routing Module MVCRouteHandler http://getdev.net View Engine – look Controller Factory Controller Action for view Execute View to get Send response markup back to user agent
  • 23. Как в контроллеры приходят параметры? Концепция Model Binders • Заполнение модели сырыми данными из формы, запроса и прочих источников данных, пришедших от пользователя – НЕ работа контроллера Это нарушило бы принцип Single Responsibility • Для любой модели можно определить класс, который ей конструирует, глобально или на уровне отдельного метода Default Model Binder • ValueProvider: данные из формы, данные из строки запроса • Сопоставление данных со свойствами модели происходит по имени • Угадайте механизм .NET, который позволяет это делать Reflection
  • 24. Areas ▪ Средство для разбиения одного большого сайта на несколько почти независимых маленьких ▪ Каждая Area имеет свой набор контроллеров, View и (опционально) моделей ▪ Типичный пример – одна Area для обычных пользователей, другая – для администраторов
  • 25. Action Filters ▪ Фильтр операции (action filter) — это атрибут, который позволяет декларативно подключать к запрошенной операции некое поведение. ▪ IActionFilter - Методы этого интерфейса вызываются до и после выполнения метода контроллера ▪ IAuthorizationFilter - Методы этого интерфейса вызываются до выполнения метода контроллера ▪ IExceptionFilter - Методы этого интерфейса вызываются всякий раз, когда при выполнении метода контроллера генерируется исключение ▪ IResultFilter - Методы этого интерфейса вызываются до и после обработки результата операции
  • 26. Dependency Injection ▪ В соответствии с первоначальной задумкой, в ASP.NET MVC предусмотрено множество мест, в которых можно перехватывать или заменять фукнционал фреймворка, не используя грязных хаков ▪ Наиболее популярные заменяемые части: - инстанциирование контроллеров - View Engine - Model Binder ▪ Всего же мест для замены стандартных частей фреймворка в ASP.NET MVC 4 порядка полутора десятков
  • 27. Интересное чтение ▪ Pro ASP.NET MVC 3 Framework by Steven Sanderson & Adam Freeman ▪ Professional ASP.NET MVC 4 by Phil Haack and many, many others ▪ http://www.asp.net/mvc ▪ Фильтры операций в ASP.NET MVC от Дино Эспозито
  • 28. Интересное видео ▪ http://www.mvcconf.com/ - онлайн-конференция, посвященная ASP.NET MVC ▪ ASP.NET MVC For Web Forms developers by Dino Esposito
  • 29. Вопросы? Внимательно слушаю!  Андрей Кулешов kaa-tula@ya.ru akuleshov.tula Специально для http://GetDev.NET