Андрей КулешовASP.NET, MVC,ASP.NET MVCИстория, паттерны, реализация
История▪ В 1991 появляется первый стандарт языка разметки HTML – Hyper Text  Markup Language▪ В следующее десятилетие набл...
Почему перестало хватать Web Forms?▪ ASP.NET – хорошая программная платформа, созданная десятилетие назад• Одно из деклари...
Что случилось?▪ AJAX▪ Стандартизация▪ JavaScript фреймворки (jQuery, Yahoo)▪ Расширение возможностей браузеров▪ Распростра...
Люди, желавшие странного...▪ Лучший контроль над генерируемой HTML-разметкой▪ Лучшие возможности для создание скриптов на ...
ДемоMVC для ASP.NET своими руками
Единая точка входа запросов▪ Все запросы перенаправляются на центральный IHttpHandler▪ Если по запрошенному пути существую...
Сферический MVC в ваакуме▪ Model-view-controller (MVC, «Модель-представление-поведение», «Модель-  представление-контролле...
Явление ASP.NET MVC народу▪ Прототип придуман в феврале 2007 года Скоттом Гуфри, на борту самолета,  на котором тот летел ...
ДемоПроект ASP.NET MVC
Separation of ConcernsРазделение ответственностиПредназначено для того, чтобы сделать код более
Configuration over Convention▪ Есть ряд простых правил (именования файлов и классов, размещения их  внутри папок), следуя ...
ASP.NET MVC – это тот же ASP.NET▪ То есть стоит на плечах гигантов...▪ Единая среда для Web Forms и MVC▪ Одно и то же прог...
Controllers▪ Задачи контроллера – это принять данные от пользователя и обработать их,  или, наоборот, подготовить данные д...
Model▪ Класс. Просто класс. Plain Old Class Object, он же POCO. Других особых  требований к нему нет.▪ С точки зрения Best...
Views▪ Отвечают за преобразование данных (модели) в браузерочитаемую  разметку▪ Использование ASPX/ASCX – только потому, ч...
Cтандартный механизм View▪ Pure HTML▪ HTML.* helpers▪ AJAX.* helpers▪ URL.* helpers▪ <%= … %> vs <%: … %> vs <% %> vs @......
Rich User Interface▪ Легкость взаимодействия с JavaScript – разметка не меняется после  серверной обработки▪ jQuery в коро...
Unobtrusive JavaScript▪ Разделение обязанностей – HTML отдельно, JavaScript отдельно▪ HTML-5 style  <input type=―text‖ dat...
Валидация данных▪ Декларативное объявление атрибутов валидности▪ Атрибуты ассоциированны с самой моделью▪ Если модель недо...
URL mapping▪ Сопоставляет пришедший запрос с контроллером, методом▪ Служит одним из источником параметров Action-ов▪ User-...
Сильно упрощенная схема генерации ответа     User Request                         IIS handles request   Routing Module   M...
Как в контроллеры приходят параметры?Концепция Model Binders•   Заполнение модели сырыми данными из формы, запроса и прочи...
Areas▪ Средство для разбиения одного большого сайта на несколько почти  независимых маленьких▪ Каждая Area имеет свой набо...
Action Filters▪ Фильтр операции (action filter) — это атрибут, который позволяет  декларативно подключать к запрошенной оп...
Dependency Injection▪ В соответствии с первоначальной задумкой, в ASP.NET MVC предусмотрено  множество мест, в которых мож...
Интересное чтение▪ Pro ASP.NET MVC 3 Framework by Steven Sanderson & Adam Freeman▪ Professional ASP.NET MVC 4 by Phil Haac...
Интересное видео▪ http://www.mvcconf.com/ - онлайн-конференция, посвященная ASP.NET MVC▪ ASP.NET MVC For Web Forms develop...
Вопросы?                 Внимательно слушаю! Андрей Кулешовkaa-tula@ya.ru    akuleshov.tulaСпециально для http://GetDev.NET
Upcoming SlideShare
Loading in …5
×

ASP.NET, MVC, ASP.NET MVC

2,830 views

Published on

Видео с доклада: http://getdev.net/Event/asp-net-mvc-4
Доклад об ASP.NET MVC, откуда и зачем он появился, какие задачи решает, какой подход к разработке исповедует. Этот доклад больше пригодится тем, кто хочет углубить и структурировать свои знания об ASP.NET MVC

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,830
On SlideShare
0
From Embeds
0
Number of Embeds
793
Actions
Shares
0
Downloads
38
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

ASP.NET, MVC, ASP.NET MVC

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

×