20
ASP.NET MVC: начало новой эры? - ! Кондуфоров Александр Email: [email protected] Weblog: www.merle-amber.blogspot.com

ASP.NET MVC: new era?

Embed Size (px)

DESCRIPTION

A technical presentation of the capabilities of the brand new ASP.NET MVC 1.0 technology for web applications creation

Citation preview

Page 1: ASP.NET MVC: new era?

ASP.NET MVC: начало новой эры? - !

Кондуфоров АлександрEmail: [email protected]: www.merle-amber.blogspot.com

Page 2: ASP.NET MVC: new era?

О чем поговорим?

паттерн MVC предпосылки появления ASP.NET MVC сравнение Web Forms и MVC ASP.NET MVC изнутри модель, контроллеры, представление,

контролы когда что использовать наше общее будущее и, конечно же, посмотрим пример :)

Page 3: ASP.NET MVC: new era?

Паттерн MVC

Диаграмма взята с http://www.rsdn.ru/article/patterns/modelviewpresenter.xml

Page 4: ASP.NET MVC: new era?

Зачем нужен MVC?

отделение работы с данными (логики) от представления

четкое разделение обязанностей между компонентами

уменьшение связности между компонентами, их независимость

дополнительный бонус: упрощение unit-тестирования

Page 5: ASP.NET MVC: new era?

Почему MVC сложно вписать в WebForms?

Data AccessPresentation (ASPX, ASCX)

Контроллер

Представление

Business Logic

Модель

Domain Model

Page 6: ASP.NET MVC: new era?

Что еще не так с WebForms?

эмуляция WinForms для web-приложений

излишняя сложность событийной модели

слишком много потоков выполнения через одни и те же события (GET, Postback, Ajax Callback)

сложность в реализации Internet-приложений с не очень большим количеством логики

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

не дружит с SEO (doPostback, etc.)

будущее WebForms?

сложность в разделении UI и бизнес-логики, code-behind часто превращается в кашу

Page 7: ASP.NET MVC: new era?

Если MVC – это хорошо, то он уже должен где-то использоваться?

Java: Swing, Struts, Tapestry, Spring MVC, etc.

C++: MFC (document – view)PHP: Symfony, Zend, etc.

Perl: Catalyst

Ruby: Ruby on Rails, Merb, etc.

Python: Django, etc.

.NET: Castle Monorail, Maverick.NET

Microsoft позади планеты всей :(

MVC

Page 8: ASP.NET MVC: new era?

Архитектура: Web Forms vs. MVC

ASP.NET Web Forms ASP.NET MVC

Связь между файлом и URL

1:1 виртуальная

Модель обработки HTTP-запросов

Postback REST-like

Подход к написанию кода

события в code-behind паттерн MVC

Размещение логики управления

code-behind контроллер

UI толстый, содержит логику, серверные контролы и код

тонкий, клиентские контролы и код

Page 9: ASP.NET MVC: new era?

Другие особенности

все на интерфейсах

поддержка unit-тестирования

легкая расширяемость

URL-маппинг контроллеров

поддержка ASPX, ASCX, Master pages

поддержка существующей инфраструктуры ASP.NET (аутентификация, роли, кеширование, сессия, провайдеры, локализация)

прощай, viewstate :)

прощай, postback-модель :-\

прощайте, многие стандартные контролы и UI библиотеки :’(

здравствуйте, jQuery, MooTools, extJS и другие js-библиотеки!

ASP.NET MVC

Page 10: ASP.NET MVC: new era?

ЖЦ запроса ASP.NET MVC

Page 11: ASP.NET MVC: new era?

URL routing

Возможности:

URL/запрос Результат

/Products/Categories все категории продуктов

/Products/List/Keyboard продукты категории Keyboard

/Products/Detail/4 продукт с id=4

By default: {controller}/{action}/{id}

Настройка Global.asax

Параметрыподстанавливаются в методы

контроллера

Настройка routing’а RegExp, HttpMethod, custom constraints

Валидация параметры запроса

Использование генерация элементов упр-ния и URL, ASP.NET Web Forms

Тестирование правила routing’а

Page 12: ASP.NET MVC: new era?

Модель

Типы модели Domain Model, Presentation Model (проекция)

Доступ к данным Datasets/DataReaders, LINQ to SQL, Entity Framework, NHibernate, другие ORM

Подходы и паттерны N-звенная архитектура, Domain Driven Design, паттерн Repository, др.

Валидация рекомендуется валидировать объекты при помощи бизнес-правил в модели

Полная свобода действий для программиста

Page 13: ASP.NET MVC: new era?

Контроллер

Основа Controller класс

Action-методы отвечают за обработку запроса

Результат выполнения

ViewResult: View, PartialView, redirect, file, text etc.

Доступ к инфраструктуре

HttpContext, Request, Response, Session, User, Server, etc.

Передача данных ViewData, ViewModel (View), ModelState (ошибки), TempData (между запросами)

Дополнительный контроль

атрибуты AcceptVerbs, OutputCache, Authorize, HandleError, кастомные

Плюшки ModelBinder (типизация), (Try)UpdateModel (автозаполнение объекта изменениями)

Тестирование полная поддержка

Более строгая структура и использование, но легкая расширяемость

Page 14: ASP.NET MVC: new era?

Представление

Форма обычная, не серверная

Стиль программирования

без code-behind и событий страницы, <%=…%>, клиентский код

Инфраструктура Master Pages, Partial View (ascx)

Получение данных из контроллера

ViewData dictionary или ViewModel шаблон

View Helpers HtmlHelper, UrlHelper, custom

Валидация ModelState из контроллера, автоматический показ, summary

Ajax ASP.NET Ajax (AjaxHelper), jQuery Ajax, др.

Другие View Engines NHaml, Spark, Brail, nVelocity

Назад в прошлое!

Page 15: ASP.NET MVC: new era?

Так а что все-таки с контролами?

Варианты Описание

Partial View (ascx) аналог обычных ascx-контролов

HtmlHelper, UrlHelper специальные классы, генерирующие HTML-разметку и учитывающие правила рутинга

MVCContrib (http://mvccontrib.codeplex.com/)

библиотека различных инструментов для MVC, в том числе и контролов

JS контролы и фреймворки

extJS, jQuery, MooTools

Контролы сторонних разработчиков

на данный момент мало, но в ближайшее будущее станет намного больше

а сами? :)

Проблема заключается в отсутствии server-side формы

Page 16: ASP.NET MVC: new era?

DEMO

Наконец-то!

Page 17: ASP.NET MVC: new era?

Когда использовать?ASP.NET MVC ASP.NET Web Forms

Internet-приложения и небольшие enterprise-приложения

Крупные приложения enterprise-уровня

Легковесный UI (типичное web-приложение с исп-нием Ajax)

Сложный многокомпонентный UI (desktop-приложение под web)

Предпочтение в использовании client-side контролов

Предпочтение в использовании server-side контролов

Необходимость иметь полный контроль над HTML и JavaScript

Отсутствие такой необходимости

Строгие требования по времени отклика и быстродействию

Менее строгие требования или отсутствие таковых

Практика TDD (Test Driven Development), больше ручной работы

RAD (Rapid Application Development)

Переход с других более низкоуровневых web-технологий, желание использовать MVC

Отсутствие серьезных знаний или опыта в web-разработке, переход с WinForms

Page 18: ASP.NET MVC: new era?

Что день грядущий нам готовит?

изучение двух веб-технологий вместо одной различный набор контролов для Web Forms и MVC различные техники, подходы, комьюнити переход многих разработчиков на ASP.NET MVC увеличение количества обычных Internet веб-сайтов,

построенных на ASP.NET (MVC) с обретением MVC более серьезной формы (контролы,

скорость разработки) и поддержки разработчиков – вполне возможно доминирование это технологии в разработке

Page 19: ASP.NET MVC: new era?

Полезные ссылки Official WebSite: http://www.asp.net/mvc/ Scott Guthrie’s blog:

http://weblogs.asp.net/scottgu/archive/tags/MVC/default.aspx Free eBook and NerdDinner example:

http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx Scott Hanselman’s blog:

http://www.hanselman.com/blog/CategoryView.aspx?category=ASP.NET+MVC Phil Haack’s blog: http://haacked.com/ Steven Walther on ASP.NET MVC: http://weblogs.asp.net/StephenWalther/ Rick Strahl’s post on ASP.NET MVC:

http://west-wind.com/weblog/posts/198731.aspx Dino Esposito on MVC architecture:

http://dotnetslackers.com/articles/aspnet/AnArchitecturalViewOfTheASPNETMVCFramework.aspx RSDN: MVC в .NET:

http://www.rsdn.ru/article/patterns/ModelViewPresenter.xml RSDN: Обобщенный MVC: http://rsdn.ru/article/patterns/generic-mvc.xml

Page 20: ASP.NET MVC: new era?

Спасибо за внимание. Вопросы?

?