Pull to refresh

Вышел ASP.NET MVC V2 Preview 1 — разбор полетов

Reading time 5 min
Views 1.1K
imageНа днях MVC 2 Preview 1 стал доступен широкой публике. Этот релиз фреймворка несет в себе весьма значительные нововведения, которые я постараюсь кратко описать в этой заметке. Прежде всего, необходимо заметить, что как и в случае с первой версией, статус “Preview 1” – означает техническую демонстрацию изменений и нового функционала. Ожидается, что заинтересованное сообщество разработчиков протестирует и оценит этот релиз и на основе отзывов в MVC Framework  будут внесены изменения для выпуска Preview 2 и так далее, до финального релиза второй версии. Другими словами, данный релиз не предназначен для использования, что называется, “в production”. Весьма вероятно, что последующие релизы могут содержать более или менее значительные изменения, из-за которых, может быть нарушена совместимость проекта написанного для preview 1 с выпусками preview 2 и так далее.

Что нового?


Итак, что же в данном релизе нового? Предлагаю вашему вниманию более или менее полный список изменений и нововведений в MVC Framework 2 по сравнению с первой версией:
  • Строго типизированные помощники (Strongly Typed UI Helpers) – позволяют определить в разметке представление определенных данных через тип полученный от лямбда выражения. Это позволяет, во-первых пользоваться intellisense, а во-вторых уменьшает число возможных ошибок еще на этапе компиляции;
  • Шаблонные помощники (Templated Helpers) – позволяют сопоставить определенному комплексному типу кусок разметки и затем одной строчкой кода производить рендеринг как разметки для вывода информации, так, например, разметки для редактирования этой информации. Используется совместно с механизмом строго типизированных помощников;
  • Области (Areas) – механизм областей позволяет в сложном и большом проекте выделить (или наоборот слить из малых проектов в один) разный по природе функционал. Например, в одном проекте вы можете определить области для форума, блога, сайта с новостями, галереи картинок и прочих частей. Иными словами области – это надстройка над контроллерами, которая позволяет их группировать;
  • Поддержка примечаний к данным (Data Annotations). MVC Framework 2 получил поддержку механизма компонентной модели .net, которая реализована в пространстве имен System.ComponentModel.DataAnnotations. Это позволяет создавать определение метаинформации для типов и свойств, которая в дальнейшем используется в разных местах, например для валидации полученных от клиента данных на стороне сервера;
  • Новый атрибут [HttpPost] позволяет указать то же самое, что и [AcceptVerbs(HttpVerbs.Post)], только сделать это короче;
  • Поддержка компонентной модели распространяется и на поддержку атрибута DefaultValue, который позволяет указать значение по умолчанию для параметров действий. В C# 4.0 вместо этого можно будет использовать встроенный в язык механизм параметров по умолчанию;
  • Связывание с бинарными данными позволяет прозрачно сопоставить бинарные данные представленные base64-строками с параметрами действий типа byte[].

Что изменилось?


Кроме нововведений в MVC Framework 2 подвернулись изменениям и работа некоторых старых функций:
  • новый защищенный метод CreateActionInvoker класса Controller, который вызывается свойством ActionInvoker для ленивого создания ActionInvoker, если он еще не создан;
  • новый защищенный виртуальный метода OnAuthorizationFailed в классе AuthorizationFilter, который позволяет фильтрам наследованным от AuthorizationFilter обрабатывает событие когда авторизация не была проведена;
  • новый метод Add(string key, object value) для класса ValueProviderDictionary, что позволяет использовать упрощенный синтаксис инициализации словаря для ValueProviderDictionary;
  • новый метод get_object для класса Sys.Mvc.AjaxContext. Этот javascript-метод поход на старый метод get_data, но отличается от него тем, что возвращает JSON-объект, если он был возвращен клиентом;
  • новое свойство ActionDescriptor в классе AuthorizationContext, содержит информацию о действии;
  • в DefaultControllerFactory убрано свойство RequestContext. Вместо этого, RequestContext передается в методы GetControllerInstance и GetControllerType. Это изменение может “поломать” предыдущие пользовательские реализации фабрик контроллеров;
  • значение area теперь зарезервировано для использования в параметрах шаблонов маршрутов.

Что исправлено?


Кроме нововведений и изменений были исправлены некоторые ошибки и недочеты. Их перевод был несколько затруднен, поскольку ни с одним из багов я не сталкивался. Поэтому, если вы обнаружите ошибку в переводе, то дайте знать:
  • исправлена ошибка при компиляции view, которое содержало Unicode-символы в названии;
  • HTML-помощники вызывали исключение NullReferenceException при добавлении ModelError без установки значения. Теперь исключение не вызывается;
  • ранее работа класса SessionStateTempDataProvider останавливалась с ошибкой, если механизм состояния сессии не был включен. Теперь провайдер вызывает исключение только, если производится попытка сохранения данных в объект состояния сессии, когда этот объект запрещен;
  • теперь AJAX-помощники могут отправлять данные submit-кнопки или submit-изображения как часть запроса при отправке данных с формы. Для того, чтобы это заработало в старых проектах, после обновления самого проекта, обновите библиотеку  MicrosoftMvcAjax.js;
  • ранее, возникала ошибка при компиляции представлений с типом вида ViewMasterPage<T>, которые не содержали ни одного блока <%=… %>. Это было исправлено.

Что будет дальше?


На официальной странице MVC Roadmap перечислены следующие направления, по которым MVC Framework будет развиваться:
  • валидация на стороне клиента;
  • строго типизированные помощники для создания полей форм;
  • строго типизированные помощники для создания гиперссылок;
  • асинхронные действия;
  • расширение функционала областей.

Кроме того, если собрать ответы СкоттаГу в комментариях, то можно составить еще небольшой списочек того, над чем работает команда разработчиков:
  • строго типизированные генераторы действий (strongly-typed action generators);
  • кэширование результатов лямбда-выражений для оптимизации производительности представлений и UI-помощников;
  • RenderAction войдет в состав MVC Framework ближе к релизу;
  • MVC Framework V2 не появится для Visual Studio 2010 beta1, но будет включен по умолчанию в beta2;
  • ну и напоследок, на вопрос про классический asp.net и будет ли для него что нового, Скотт ответил: “Absolutely!  I'll be doing a big blog post series soon that talks about the improvements to WebForms coming with ASP.NET 4.0.  There are a bunch of great new non-MVC features coming as part of that release.”. Ждемс.

Полезные ссылки



Думаю ссылок на первое время хватит. Постараюсь по возможности написать несколько статей по теме.

Заключение


MVC Framework стремительно развивается. Новый функционал, который появился в V2 Preview 1 очень интересен и уверен найдет широкое применение на практике. Не забывайте только о том, что как и ранее, preview-версии не рекомендуется использовать в production. Если вы все же рискнете задействовать некоторые новые функции в работающем приложении, то будьте готовы к тому, что последующие выпуски MVC V2 могут потребовать переписывания некоторой части кода.
Пока разработчики ждут от нас с вами отзывов и отчетов о найденных ошибках. Приятного всем программирования!

Progg it
Tags:
Hubs:
+15
Comments 10
Comments Comments 10

Articles