6. Что еще не так с WebForms ? эмуляция WinForms для web- приложений излишняя сложность событийной модели слишком много потоков выполнения через одни и те же события ( GET, Postback, Ajax Callback) сложность в реализации Internet- приложений с не очень большим количеством логики практически невозможно нормально покрыть тестами не дружит с SEO ( doPostback, etc.) будущее WebForms? сложность в разделении UI и бизнес-логики, code - behind часто превращается в кашу
7. Если 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
8. Архитектура: Web Forms vs. MVC ASP.NET Web Forms ASP.NET MVC Связь между файлом и URL 1:1 виртуальная Модель обработки HTTP- запросов Postback REST - like Подход к написанию кода события в code-behind паттерн MVC Размещение логики управления code-behind контроллер UI толстый, содержит логику, серверные контролы и код тонкий, клиентские контролы и код
9. Другие особенности все на интерфейсах поддержка unit- тестирования легкая расширяемость URL -маппинг контроллеров поддержка ASPX, ASCX, Master pages поддержка существующей инфраструктуры ASP.NET (аутентификация, роли, кеширование, сессия, провайдеры, локализация) прощай, viewstate :) прощай, postback -модель :-прощайте, многие стандартные контролы и UI библиотеки : ’ ( здравствуйте, jQuery, MooTools, extJS и другие js- библиотеки! ASP.NET MVC
12. Модель Полная свобода действий для программиста Типы модели Domain Model, Presentation Model ( проекция) Доступ к данным Datasets/DataReaders, LINQ to SQL, Entity Framework, NHibernate, другие ORM Подходы и паттерны N- звенная архитектура, Domain Driven Design, паттерн Repository, др . Валидация рекомендуется валидировать объекты при помощи бизнес-правил в модели
13. Контроллер Более строгая структура и использование, но легкая расширяемость Основа 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 (автозаполнение объекта изменениями) Тестирование полная поддержка
14. Представление Назад в прошлое! Форма обычная, не серверная Стиль программирования без 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
15. Так а что все-таки с контролами? а сами? :) Проблема заключается в отсутствии server-side формы Варианты Описание Partial View (ascx) аналог обычных ascx- контролов HtmlHelper, UrlHelper специальные классы, генерирующие HTML- разметку и учитывающие правила рутинга MVCContrib ( http://mvccontrib.codeplex.com/ ) библиотека различных инструментов для MVC, в том числе и контролов JS контролы и фреймворки extJS, jQuery, MooTools Контролы сторонних разработчиков на данный момент мало, но в ближайшее будущее станет намного больше
16.
17. Когда использовать? 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