29

Click here to load reader

ASP.NET, MVC, ASP.NET MVC

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: ASP.NET, MVC, ASP.NET MVC

ASP.NET, MVC, ASP.NET MVCИстория, паттерны, реализация

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

Page 2: ASP.NET, MVC, ASP.NET MVC

История

▪ В 1991 появляется первый стандарт языка разметки HTML – Hyper Text Markup Language

▪ В следующее десятилетие наблюдается взрывной рост количества веб-серверов (как программного обеспечения, так и машин, обслуживающих запросы), веб-браузеров, веб-стандартов

▪ От серверов, отдающих статическое содержимое (файлы на жестком диске) – к динамическому содержимому (когда возвращаемый результат был результатом работы программы)

▪ Январь 2002 – релиз ASP.NET Web Forms (вместе с .NET как таковым)

Page 3: ASP.NET, MVC, ASP.NET MVC

Почему перестало хватать Web Forms?

▪ ASP.NET – хорошая программная платформа, созданная десятилетие назад

• Одно из декларированных преимуществ – не нужно учить HTML – мы кидаем на страницу контролы (привет, разработчики Visual Basic) и всё автомагически происходит на сервере

• Потому что в далекие времена ничего хорошего на клиенте происходить не могло

• Высокая сложность клиентского кода – у каждого браузера свой диалект JavaScript (он же LiveScript, он же JScript, и всё это станет стандартом ECMAScript), своя DOM, и нет никаких распространенных фреймворков, позволяющих абстрагироваться от этих различий

• Обмен данными между клиентом и сервером идёт строго по схеме GET – POST (и разработчикам Web Forms даже не надо знать этих слов)

Page 4: ASP.NET, MVC, ASP.NET MVC

Что случилось?

▪ AJAX

▪ Стандартизация

▪ JavaScript фреймворки (jQuery, Yahoo)

▪ Расширение возможностей браузеров

▪ Распространение unit-тестирования

Page 5: ASP.NET, MVC, ASP.NET MVC

Люди, желавшие странного...

▪ Лучший контроль над генерируемой HTML-разметкой

▪ Лучшие возможности для создание скриптов на клиенте

▪ Больше возможностей для юнит-тестирования логики

Page 6: ASP.NET, MVC, ASP.NET MVC

ДемоMVC для ASP.NET своими руками

Page 7: ASP.NET, MVC, ASP.NET MVC

Единая точка входа запросов

▪ Все запросы перенаправляются на центральный IHttpHandler

▪ Если по запрошенному пути существуют физический файл на диске, то сервер возвращает этот файл

▪ Иначе – запрос обрабатывается согласно правилам роутинга

Page 8: ASP.NET, MVC, ASP.NET MVC

Сферический MVC в ваакуме

▪ Model-view-controller (MVC, «Модель-представление-поведение», «Модель-представление-контроллер») — архитектура программного обеспечения, в которой модель данных приложения, пользовательский интерфейс и управляющая логика разделены на три отдельных компонента, так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты.

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

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

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

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

- для одной и той же модели можно создавать различные представления

Page 9: ASP.NET, MVC, ASP.NET MVC

Явление ASP.NET MVC народу

▪ Прототип придуман в феврале 2007 года Скоттом Гуфри, на борту самолета, на котором тот летел на конференцию на восточное побережье США

▪ Впервые показан в октябре 2007 года, где вызвал интерес и желание продолжать

▪ ASP.NET MVC CTP – декабрь 2007

▪ Первый релиз в марте 2009

▪ Последний стабильный релиз – MVC 4 – август 2012 г.

Page 10: ASP.NET, MVC, ASP.NET MVC

ДемоПроект ASP.NET MVC

Page 11: ASP.NET, MVC, ASP.NET MVC

Separation of ConcernsРазделение ответственности

Предназначено для того, чтобы сделать код более• тестируемым• открытым к модификациям и рефакторингу• повторно используемым• управляемым• масштабируемым

Page 12: ASP.NET, MVC, ASP.NET MVC

Configuration over Convention

▪ Есть ряд простых правил (именования файлов и классов, размещения их внутри папок), следуя которым, вы просто подключаете ваш код (или разметку) к инфраструктуре MVC, и не выполняете никакого дополнительного конфигурирования

▪ Например – все контроллеры должны реализовывать интерфейс IController (условие, необходимое для работы), находиться в папке Controllers иметь постфикс имение Controller (конвенции, позволяющие обойтись без их явного конфигурирования)

Page 13: ASP.NET, MVC, ASP.NET MVC

ASP.NET MVC – это тот же ASP.NET

▪ То есть стоит на плечах гигантов...

▪ Единая среда для Web Forms и MVC

▪ Одно и то же программное окружение– Один и тот же набор модулей для аутентификации,

кэширования, хранения сессий– Централизованный HTTP хэндлер, отдающий все ресурсы

• Возможность работы бок о бок– Классические Web Forms и ASP.NET MVC могут работать

внутри одного и того же проекта

Page 14: ASP.NET, MVC, ASP.NET MVC

Controllers

▪ Задачи контроллера – это принять данные от пользователя и обработать их, или, наоборот, подготовить данные для отправки пользователю

▪ Содержит множество (возможно, пустое )Actions

▪ Как правило – сгруппированных по смыслу

▪ Каждый Action возвращает информацию, содержащую:- модель (model)- данные для выбора представления (View)

Page 15: ASP.NET, MVC, ASP.NET MVC

Model

▪ Класс. Просто класс. Plain Old Class Object, он же POCO. Других особых требований к нему нет.

▪ С точки зрения Best Practices существует два подхода:- пишем для Action-ов свои классы, описывающие минимально необходимую сущность (public class HumanViewModel)- используем классы из доменной модели нашего приложения, например, сгенерированные Entity Framework и имеющие маппинги на базу данных

▪ (автор является строгим приверженцем первого подхода)

▪ Однако модель может быть декорирована атрибутами, описывающими её и автоматически включающими клиентскую и серверную валидацию

▪ (хотя с тем же успехом к ней может быть создана парная мета-модель... Но это уже совсем отдельная тема)

Page 16: ASP.NET, MVC, ASP.NET MVC

Views

▪ Отвечают за преобразование данных (модели) в браузерочитаемую разметку

▪ Использование ASPX/ASCX – только потому, что мы уже умеем на них писать

▪ Это не полноценная страница (Page) – это шаблон. У него нет жизненного цикла, у него вообще жизни нет.

▪ Единственная цель остается той же – получить строку с HTML внутри

▪ Возможность подключения кастомизированных View Engine, начиная с первой версии

▪ Поддерживаемый Microsoft ViewEngine Razor начиная с третьей версии ASP.NET MVC

Page 17: ASP.NET, MVC, ASP.NET MVC

Cтандартный механизм View

▪ Pure HTML

▪ HTML.* helpers

▪ AJAX.* helpers

▪ URL.* helpers

▪ <%= … %> vs <%: … %> vs <% %> vs @... vs @{ … }

▪ Повторное использование кода и разметки – пользовательские контролы

Page 18: ASP.NET, MVC, ASP.NET MVC

Rich User Interface

▪ Легкость взаимодействия с JavaScript – разметка не меняется после серверной обработки

▪ jQuery в коробке, поддерживается Microsoft

▪ Легкость AJAX-взаимодействия с сервером – можно обращаться напрямую к Action

▪ Встроенные AJAX.* helpers (начиная с версии 3 используют jQuery, а не собственные библиотеки Microsoft)

▪ Обмен данными в форматах plain HTML, JSON, JavaScript

▪ Благодаря этому – повторное использование серверных контролов в клиентском коде без многократных перегрузок страниц

Page 19: ASP.NET, MVC, ASP.NET MVC

Unobtrusive JavaScript

▪ Разделение обязанностей – HTML отдельно, JavaScript отдельно

▪ HTML-5 style<input type=“text” data-valid=“true” value=“Привет”/>

▪ AJAX.* и валидация данных используют этот подход,начиная с версии 3

▪ Значительно упрощает получение HTML через ajax-запрос

▪ Значительно упрощает кастомизацию

▪ Значительно увеличивает читаемость кода

Page 20: ASP.NET, MVC, ASP.NET MVC

Валидация данных

▪ Декларативное объявление атрибутов валидности

▪ Атрибуты ассоциированны с самой моделью

▪ Если модель недоступна (например, сгенерирована) – можно создать для неё класс – поставщик метаданных

▪ Единая модель валидации для клиента и сервера

▪ Начиная с MVC 3 – jquery.validation как движок клиентской валидации

▪ Декларативный HTML-5 стиль на клиенте – легкость работы с AJAX

Page 21: ASP.NET, MVC, ASP.NET MVC

URL mapping

▪ Сопоставляет пришедший запрос с контроллером, методом

▪ Служит одним из источником параметров Action-ов

▪ User-friendly URL

Page 22: ASP.NET, MVC, ASP.NET MVC

Сильно упрощенная схема генерации ответа

User Requesthttp://getdev.ne

t

IIS handles request

Routing Module

MVCRouteHandler

Controller Factory Controller

Action View Engine – look for view

Page 23: ASP.NET, MVC, ASP.NET MVC

Как в контроллеры приходят параметры?

Концепция Model Binders

• Заполнение модели сырыми данными из формы, запроса и прочих источников данных, пришедших от пользователя – НЕ работа контроллераЭто нарушило бы принцип Single Responsibility

• Для любой модели можно определить класс, который ей конструирует, глобально или на уровне отдельного метода

Default Model Binder

• ValueProvider: данные из формы, данные из строки запроса

• Сопоставление данных со свойствами модели происходит по имени

• Угадайте механизм .NET, который позволяет это делать

Reflection

Page 24: ASP.NET, MVC, ASP.NET MVC

Areas

▪ Средство для разбиения одного большого сайта на несколько почти независимых маленьких

▪ Каждая Area имеет свой набор контроллеров, View и (опционально) моделей

▪ Типичный пример – одна Area для обычных пользователей, другая – для администраторов

Page 25: ASP.NET, MVC, ASP.NET MVC

Action Filters

▪ Фильтр операции (action filter) — это атрибут, который позволяет декларативно подключать к запрошенной операции некое поведение.

▪ IActionFilter - Методы этого интерфейса вызываются до и после выполнения метода контроллера

▪ IAuthorizationFilter - Методы этого интерфейса вызываются до выполнения метода контроллера

▪ IExceptionFilter - Методы этого интерфейса вызываются всякий раз, когда при выполнении метода контроллера генерируется исключение

▪ IResultFilter - Методы этого интерфейса вызываются до и после обработки результата операции

Page 26: ASP.NET, MVC, ASP.NET MVC

Dependency Injection

▪ В соответствии с первоначальной задумкой, в ASP.NET MVC предусмотрено множество мест, в которых можно перехватывать или заменять фукнционал фреймворка, не используя грязных хаков

▪ Наиболее популярные заменяемые части:- инстанциирование контроллеров- View Engine- Model Binder

▪ Всего же мест для замены стандартных частей фреймворка в ASP.NET MVC 4 порядка полутора десятков

Page 27: ASP.NET, MVC, ASP.NET MVC

Интересное чтение

▪ 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 от Дино Эспозито

Page 28: ASP.NET, MVC, ASP.NET MVC

Интересное видео

▪ http://www.mvcconf.com/ - онлайн-конференция, посвященная ASP.NET MVC

▪ ASP.NET MVC For Web Forms developers by Dino Esposito

Page 29: ASP.NET, MVC, ASP.NET MVC

Вопросы?Внимательно слушаю!

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

[email protected]

akuleshov.tula

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