ASP.NET MVC

21
ASP.NET MVC Принципы работы и внутреннее устройство TulaDev.NET Андрей Кулешов Codemasters International Senior C# Developer, Team Lead [email protected] | http://www.codemastersintl.com/Blogs/Andrey -Kuleshov

description

ASP.NET MVC - внутреннее устройство

Transcript of ASP.NET MVC

Page 1: ASP.NET MVC

ASP.NET MVCПринципы работы и внутреннее

устройство

TulaDev.NET

Андрей КулешовCodemasters InternationalSenior C# Developer, Team Lead

[email protected] | http://www.codemastersintl.com/Blogs/Andrey-Kuleshov

Page 2: ASP.NET MVC

Что будет:

ASP.NET Web Forms – что произошло?Model-View-ControllerMVC с точки зрения веб-сервераПара параметров – controller и action

Page 3: ASP.NET MVC

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

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

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

• Потому что в далекие времена ничего хорошего на клиенте происходить не могло• Высокая сложность JavaScript – у каждого браузера свой диалект, отсутствие широко распространенных фреймворков

Page 4: ASP.NET MVC

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

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

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

• Потому что в далекие времена ничего хорошего на клиенте происходить не могло• Высокая сложность JavaScript – у каждого браузера свой диалект, отсутствие широко распространенных фреймворков

Что случилось?• AJAX• JavaScript фреймворки (jQuery, Yahoo)• Расширение возможностей браузеров • Юнит-тестирование

Page 5: ASP.NET MVC

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

•Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контроллера), изменяя своё состояние.•Представление (View). Отвечает за отображение информации (пользовательский интерфейс).•Контроллер(Controller). Интерпретирует данные, введённые пользователем, и информирует модель и представление о необходимости соответствующей реакции.- модель независима от визуального представления- для одной и той же модели можно создавать различные представления

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

Page 6: ASP.NET MVC

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

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

Предназначено для того, чтобы сделать код более

Page 7: ASP.NET MVC

ASP.NET и IIS делали одни и те же людиHTTP handlers, HTTP modules, URL rewritingIHttpHandler – как единая точка входаОткрытая и расширяемая конфигурация

Каждый запрос к серверу обрабатывается HTTP handler

Связывание URL с заданным HTTP handler превращает ASP.NET в RESTful систему (с поддержкой удобочитаемых URL)

Что нужно менять в ASP.NET, чтобы добиться эффекта MVC?

Page 8: ASP.NET MVC

ДемоTulaMvc

Page 9: ASP.NET MVC

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

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

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

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

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

Page 10: ASP.NET MVC

URL mappingВсё начинается с пользователя

http://theshop.com/products/prices/bicycle

Что возвращать в ответ на этот запрос?

Page 11: ASP.NET MVC

Что возвращают Actions?HTML

Как расшифровывается HTML?

HyperText Markup Language

В конечном итоге всё сводится к типу String

Вопрос, как обычно в удобстве

Page 12: ASP.NET MVC

Тогда зачем нужны View?

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

• Это НЕ Page – это шаблон• Единственная цель остается той же – получить строку с HTML

(JavaScript, Json, Base64 Binary) внутри• Возможность подключения кастомизированных View Engine,

начиная с первой версии• Поддерживаемый Microsoft ViewEngine Razor начиная с

третьей версии ASP.NET MVC

Page 13: ASP.NET MVC

View

• Pure HTML• HTML.* helpers• AJAX.* helpers• URL.* helpers• <%= … %> vs <%: … %> vs <% %>• Повторное использование кода и разметки –

пользовательские контролы

Page 14: ASP.NET MVC

ДемоASP.NET MVC сайт с нуля

Page 15: ASP.NET MVC

Rich User Interface

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

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

Action• Встроенные AJAX.* helpers (начиная с версии 3 используют jQuery, а не

собственные библиотеки Microsoft)• Обмен данными в форматах plain HTML, JSON, JavaScript• Благодаря этому – повторное использование серверных контролов в клиентском

коде без многократных перегрузок страниц

Page 16: ASP.NET MVC

Unobtrusive JavaScript

• Разделение обязанностей – HTML отдельно, JavaScript отдельно• HTML-5 style

<input type=“text” data-valid=“true” value=“Привет”/>• AJAX.* и валидация данных используют этот подход,

начиная с версии 3• Значительно упрощает получение HTML через ajax-запрос• Значительно упрощает кастомизацию• Значительно увеличивает читаемость кода

Page 17: ASP.NET MVC

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

• Декларативное объявление атрибутов валидности• Атрибуты ассоциированны с самой моделью• Если модель недоступна (например, сгенерирована) – можно

создать для неё класс – поставщик метаданных• Единая модель валидации для клиента и сервера• Начиная с MVC 3 – jquery.validation как движок клиентской

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

Page 18: ASP.NET MVC

ДемоВалидация, HTML-5 аттрибуты

Page 19: ASP.NET MVC

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

Концепция Model Binders

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

Default Model Binder

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

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

Reflection

Page 20: ASP.NET MVC

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

Андрей КулешовCodemasters InternationalSenior C# Developer, Team [email protected] | http://www.codemastersintl.com/Blogs/Andrey-Kuleshov

Page 21: ASP.NET MVC

Источники• ASP.NET

http://asp.net/mvc/• Dino Esposito blog

http://weblogs.asp.net/despos/• MVC conference

http://www.mvcconf.com/• Scott Guthrie blog

http://weblogs.asp.net/scottgu/• Bred Wilson blog

http://bradwilson.typepad.com/blog/• Steve Sanderson blog

http://blog.stevensanderson.com/• Haack, Hanselman и другие гуру

Андрей КулешовCodemasters InternationalSenior C# Developer, Team [email protected] | http://www.codemastersintl.com/Blogs/Andrey-Kuleshov