Upload
alexander-konduforov
View
3.602
Download
1
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
ASP.NET MVC: начало новой эры? - !
Кондуфоров АлександрEmail: [email protected]: www.merle-amber.blogspot.com
О чем поговорим?
паттерн MVC предпосылки появления ASP.NET MVC сравнение Web Forms и MVC ASP.NET MVC изнутри модель, контроллеры, представление,
контролы когда что использовать наше общее будущее и, конечно же, посмотрим пример :)
Паттерн MVC
Диаграмма взята с http://www.rsdn.ru/article/patterns/modelviewpresenter.xml
Зачем нужен MVC?
отделение работы с данными (логики) от представления
четкое разделение обязанностей между компонентами
уменьшение связности между компонентами, их независимость
дополнительный бонус: упрощение unit-тестирования
Почему MVC сложно вписать в WebForms?
Data AccessPresentation (ASPX, ASCX)
Контроллер
Представление
Business Logic
Модель
Domain Model
Что еще не так с WebForms?
эмуляция WinForms для web-приложений
излишняя сложность событийной модели
слишком много потоков выполнения через одни и те же события (GET, Postback, Ajax Callback)
сложность в реализации Internet-приложений с не очень большим количеством логики
практически невозможно нормально покрыть тестами
не дружит с SEO (doPostback, etc.)
будущее WebForms?
сложность в разделении UI и бизнес-логики, code-behind часто превращается в кашу
Если 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
Архитектура: Web Forms vs. MVC
ASP.NET Web Forms ASP.NET MVC
Связь между файлом и URL
1:1 виртуальная
Модель обработки HTTP-запросов
Postback REST-like
Подход к написанию кода
события в code-behind паттерн MVC
Размещение логики управления
code-behind контроллер
UI толстый, содержит логику, серверные контролы и код
тонкий, клиентские контролы и код
Другие особенности
все на интерфейсах
поддержка unit-тестирования
легкая расширяемость
URL-маппинг контроллеров
поддержка ASPX, ASCX, Master pages
поддержка существующей инфраструктуры ASP.NET (аутентификация, роли, кеширование, сессия, провайдеры, локализация)
прощай, viewstate :)
прощай, postback-модель :-\
прощайте, многие стандартные контролы и UI библиотеки :’(
здравствуйте, jQuery, MooTools, extJS и другие js-библиотеки!
ASP.NET MVC
ЖЦ запроса ASP.NET MVC
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’а
Модель
Типы модели Domain Model, Presentation Model (проекция)
Доступ к данным Datasets/DataReaders, LINQ to SQL, Entity Framework, NHibernate, другие ORM
Подходы и паттерны N-звенная архитектура, Domain Driven Design, паттерн Repository, др.
Валидация рекомендуется валидировать объекты при помощи бизнес-правил в модели
Полная свобода действий для программиста
Контроллер
Основа 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 (автозаполнение объекта изменениями)
Тестирование полная поддержка
Более строгая структура и использование, но легкая расширяемость
Представление
Форма обычная, не серверная
Стиль программирования
без 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
Назад в прошлое!
Так а что все-таки с контролами?
Варианты Описание
Partial View (ascx) аналог обычных ascx-контролов
HtmlHelper, UrlHelper специальные классы, генерирующие HTML-разметку и учитывающие правила рутинга
MVCContrib (http://mvccontrib.codeplex.com/)
библиотека различных инструментов для MVC, в том числе и контролов
JS контролы и фреймворки
extJS, jQuery, MooTools
Контролы сторонних разработчиков
на данный момент мало, но в ближайшее будущее станет намного больше
а сами? :)
Проблема заключается в отсутствии server-side формы
DEMO
Наконец-то!
Когда использовать?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
Что день грядущий нам готовит?
изучение двух веб-технологий вместо одной различный набор контролов для Web Forms и MVC различные техники, подходы, комьюнити переход многих разработчиков на ASP.NET MVC увеличение количества обычных Internet веб-сайтов,
построенных на ASP.NET (MVC) с обретением MVC более серьезной формы (контролы,
скорость разработки) и поддержки разработчиков – вполне возможно доминирование это технологии в разработке
Полезные ссылки 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
Спасибо за внимание. Вопросы?
?