ASP.NET, MVC, ASP.NET MVC

GetDev.NET
GetDev.NETDeveloper à GetDev.NET
Андрей Кулешов




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
1 sur 29

Recommandé

ASP.NET MVC for Binary Studio Academy 2016 par
ASP.NET MVC for Binary Studio Academy 2016ASP.NET MVC for Binary Studio Academy 2016
ASP.NET MVC for Binary Studio Academy 2016Binary Studio
170 vues11 diapositives
Binary Studio Academy 2016: Asp.NET MVC par
Binary Studio Academy 2016: Asp.NET MVCBinary Studio Academy 2016: Asp.NET MVC
Binary Studio Academy 2016: Asp.NET MVCBinary Studio
112 vues11 diapositives
MVC par
MVCMVC
MVCБахрам Ходжаев
269 vues4 diapositives
ASP.NET MVC par
ASP.NET MVCASP.NET MVC
ASP.NET MVCSQALab
529 vues14 diapositives
130 - Spring WebFlow. Создание проекта par
130 - Spring WebFlow. Создание проекта130 - Spring WebFlow. Создание проекта
130 - Spring WebFlow. Создание проектаRoman Brovko
164 vues5 diapositives
VIPER architecture par
VIPER architectureVIPER architecture
VIPER architectureAlex Rudyak
386 vues48 diapositives

Contenu connexe

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

ASP.NET MVC par
ASP.NET MVCASP.NET MVC
ASP.NET MVCGetDev.NET
784 vues21 diapositives
ASP.NET MVC: new era? par
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?Alexander Konduforov
1.6K vues20 diapositives
C# Web. Занятие 05. par
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.Igor Shkulipa
490 vues50 diapositives
Паттерны проектирования par
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
127 vues26 diapositives
C# Web. Занятие 09. par
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
1.6K vues60 diapositives
Стандарты и соглашения в сложных ООП-приложениях par
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложенияхMagecom Ukraine
539 vues32 diapositives

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

Паттерны проектирования par ITCP Community
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
ITCP Community127 vues
C# Web. Занятие 09. par Igor Shkulipa
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa1.6K vues
Стандарты и соглашения в сложных ООП-приложениях par Magecom Ukraine
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
Magecom Ukraine539 vues
Шаблоны проектирования в Magento par Pavel Usachev
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
Pavel Usachev2.3K vues
C# Web. Занятие 01. par Igor Shkulipa
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
Igor Shkulipa1.1K vues
Референсная архитектура приложения на ASP.NET MVC par Andrew Mayorov
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
Andrew Mayorov372 vues
09 - Web-технологии. MVC фреймворки par Roman Brovko
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
Roman Brovko158 vues
Как пройти собеседование и получить первую работу на Swift par Anton Loginov
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
Anton Loginov2.1K vues
Разработка мобильного и веб интерфейса для Caché par InterSystems CEE
Разработка мобильного и веб интерфейса для CachéРазработка мобильного и веб интерфейса для Caché
Разработка мобильного и веб интерфейса для Caché
InterSystems CEE253 vues
Андрей Завадский "Бессерверная архитектура" par Fwdays
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
Fwdays730 vues
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож... par Ilya Kaznacheev
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Анна Якубенко, Татьяна Лебедева - SAP ERP в качестве backend для HTML5 прилож...
Ilya Kaznacheev475 vues
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O... par WDDay
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET»  O...
ВІТАЛІЙ ГОНЧАРУК «За допомогою чого пишуться серйозні веб додатки на .NET» O...
WDDay 20 vues

Plus de GetDev.NET

Go par
GoGo
GoGetDev.NET
620 vues15 diapositives
Leap Motion - игрушка с заделом на будущее par
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущееGetDev.NET
424 vues16 diapositives
Гирлянда для программистов par
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистовGetDev.NET
1.8K vues40 diapositives
Mind Mapping, или как заставить свой мозг работать лучше par
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучшеGetDev.NET
1.2K vues35 diapositives
Что нового в Visual Studio 2015 par
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015GetDev.NET
1.9K vues38 diapositives
Docker контейнерная революция par
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
4.3K vues57 diapositives

Plus de GetDev.NET(20)

Leap Motion - игрушка с заделом на будущее par GetDev.NET
Leap Motion - игрушка с заделом на будущееLeap Motion - игрушка с заделом на будущее
Leap Motion - игрушка с заделом на будущее
GetDev.NET424 vues
Гирлянда для программистов par GetDev.NET
Гирлянда для программистовГирлянда для программистов
Гирлянда для программистов
GetDev.NET1.8K vues
Mind Mapping, или как заставить свой мозг работать лучше par GetDev.NET
Mind Mapping, или как заставить свой мозг работать лучшеMind Mapping, или как заставить свой мозг работать лучше
Mind Mapping, или как заставить свой мозг работать лучше
GetDev.NET1.2K vues
Что нового в Visual Studio 2015 par GetDev.NET
Что нового в Visual Studio 2015Что нового в Visual Studio 2015
Что нового в Visual Studio 2015
GetDev.NET1.9K vues
Docker контейнерная революция par GetDev.NET
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
GetDev.NET4.3K vues
Windows 10 для пользователей и разработчиков par GetDev.NET
Windows 10 для пользователей и разработчиковWindows 10 для пользователей и разработчиков
Windows 10 для пользователей и разработчиков
GetDev.NET972 vues
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК par GetDev.NET
PhoneGap для мобильного разработчика - глубокое погружение без ОЗКPhoneGap для мобильного разработчика - глубокое погружение без ОЗК
PhoneGap для мобильного разработчика - глубокое погружение без ОЗК
GetDev.NET1.4K vues
ASP.NET Web API par GetDev.NET
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
GetDev.NET1.8K vues
Что нового в Visual Studio 2013 par GetDev.NET
Что нового в Visual Studio 2013Что нового в Visual Studio 2013
Что нового в Visual Studio 2013
GetDev.NET1.7K vues
Создание повторно используемых бизнес моделей с помощью технологии Domain Com... par GetDev.NET
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
GetDev.NET1.5K vues
Особенности мобильной платформы Windows Phone 8 par GetDev.NET
Особенности мобильной платформы Windows Phone 8Особенности мобильной платформы Windows Phone 8
Особенности мобильной платформы Windows Phone 8
GetDev.NET2.5K vues
Async Javascript par GetDev.NET
Async JavascriptAsync Javascript
Async Javascript
GetDev.NET1.6K vues
XAML - язык разметки приложений par GetDev.NET
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложений
GetDev.NET1.5K vues
Dynamic Language Runtime par GetDev.NET
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
GetDev.NET782 vues
JavaScript: хороший тон клиентской разработки par GetDev.NET
JavaScript: хороший тон клиентской разработкиJavaScript: хороший тон клиентской разработки
JavaScript: хороший тон клиентской разработки
GetDev.NET4.7K vues
Roslyn - компилятор как сервис par GetDev.NET
Roslyn - компилятор как сервисRoslyn - компилятор как сервис
Roslyn - компилятор как сервис
GetDev.NET953 vues

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