ASP.NET MVC
-
Upload
getdevnet -
Category
Technology
-
view
2.232 -
download
0
Embed Size (px)
description
Transcript of ASP.NET MVC

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

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

Почему перестало хватать Web Forms?
• ASP.NET – хорошая программная платформа, созданная десятилетие назад
• Одно из декларированных преимуществ – не нужно учить HTML – всё происходит на сервере (высокий уровень абстракции)
• Потому что в далекие времена ничего хорошего на клиенте происходить не могло• Высокая сложность JavaScript – у каждого браузера свой диалект, отсутствие широко распространенных фреймворков

Почему перестало хватать Web Forms?
• ASP.NET – хорошая программная платформа, созданная десятилетие назад
• Одно из декларированных преимуществ – не нужно учить HTML – всё происходит на сервере (высокий уровень абстракции)
• Потому что в далекие времена ничего хорошего на клиенте происходить не могло• Высокая сложность JavaScript – у каждого браузера свой диалект, отсутствие широко распространенных фреймворков
Что случилось?• AJAX• JavaScript фреймворки (jQuery, Yahoo)• Расширение возможностей браузеров • Юнит-тестирование

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

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

ASP.NET и IIS делали одни и те же людиHTTP handlers, HTTP modules, URL rewritingIHttpHandler – как единая точка входаОткрытая и расширяемая конфигурация
Каждый запрос к серверу обрабатывается HTTP handler
Связывание URL с заданным HTTP handler превращает ASP.NET в RESTful систему (с поддержкой удобочитаемых URL)
Что нужно менять в ASP.NET, чтобы добиться эффекта MVC?

ДемоTulaMvc

Единая среда для Web Forms и MVC
• Одно и то же программное окружение– Один и тот же набор модулей для аутентификации,
кэширования, хранения сессий– Централизованный HTTP хэндлер, отдающий все
ресурсы• Возможность работы бок о бок– Классические Web Forms и ASP.NET MVC могут работать
внутри одного и того же проекта

URL mappingВсё начинается с пользователя
http://theshop.com/products/prices/bicycle
Что возвращать в ответ на этот запрос?

Что возвращают Actions?HTML
Как расшифровывается HTML?
HyperText Markup Language
В конечном итоге всё сводится к типу String
Вопрос, как обычно в удобстве

Тогда зачем нужны View?
• Использование ASPX/ASCX – только потому, что мы уже умеем на них писать
• Это НЕ Page – это шаблон• Единственная цель остается той же – получить строку с HTML
(JavaScript, Json, Base64 Binary) внутри• Возможность подключения кастомизированных View Engine,
начиная с первой версии• Поддерживаемый Microsoft ViewEngine Razor начиная с
третьей версии ASP.NET MVC

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

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

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

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

Как в контроллеры приходят параметры?
Концепция Model Binders
• ValueProvider: данные из формы, данные из строки запроса• Сопоставление данных со свойствами модели происходит по имени• Угадайте механизм .NET, который позволяет это делать
Default Model Binder
• Заполнение модели сырыми данными из формы, запроса и прочих источников данных, пришедших от пользователя – НЕ работа контроллераЭто нарушило бы принцип Single Responsibility
• Для любой модели можно определить класс, который ей конструирует, глобально или на уровне отдельного метода
Reflection

Вопросы?Внимательно слушаю
Андрей КулешовCodemasters InternationalSenior C# Developer, Team [email protected] | http://www.codemastersintl.com/Blogs/Andrey-Kuleshov

Источники• 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