ASP.NET MVC 4 Roadmap

Опубликован список задач, которые намечены к реализации в четвертой версии ASP.NET MVC.

По этому поводу в блоге Хила Хаака (Phil Haack) появилась небольшая заметка. В ней особо подчеркивается, что заявленные цели не являются окончательными. Сообщество ASP.NET MVC разработчиков может повлиять на них, публикуя свои замечания и предложения на официальном форуме. Кроме того, в документе не отмечены некоторые улучшения движка представлений Razor и другие возможности, которые будут доступны в следующей версии ASP.NET Web Pages.

Основная цель разработчиков – сделать ASP.NET MVC лучшей платформой для создания современных веб-приложений. Для её достижения составлен список задач. Вот некоторые его пункты.

Рецепты (Recipe)

По сути, это развитие идеи заготовок (scaffolding). Основное отличие заключается в большей ориентированности на решение конкретных задач. При этом рецепт предоставляет полноценное решение заданной проблемы: авторизации OAuth, создания таблицы с поддержкой Ajax и т.д. В результате, разработчик получит исходный код и блоки пользовательского интерфейса. Для их генерации рецепт может запрашивать необходимые параметры у разработчика.

Поддержка мобильных устройств

Приложения, использующие шаблон по умолчанию, теперь будут лучше выглядеть на мобильных устройствах. Это достигнуто доработкой разметки страниц и CSS.

Сравнение ASP.NET MVC 3 и 4

Также будет представлен специальный шаблон для приложений, ориентированных в первую очередь на смартфоны, небольшие планшеты и т.д.

Шаблон для мобильных веб-приложений в ASP.NET MVC 4

Преставления для мобильных устройствКроме того, появятся возможность создания отдельных Представлений для мобильных устройств. Они будут отмечены суффиксом Mobile. Например, в папке View\Home можно создать два Представления Index.cshtml и Index.Modile.cshtml. Тогда при обращении к Действию Index с компьютера будет автоматически использоваться первый вариант. А в случае использования смартфона – второй. Кроме того, будет поддерживается переключение межу ними “на лету”.

Поддержка вспомогательных методов, использующих синтаксис Razor

В данный момент возможно размещение вспомогательных методов, использующих синтаксис Razor, в папке App_Code. Для этого достаточно создать там файл с расширением .cshtml or .vbhtml. Но в этом случае в их коде не будет возможности обратиться к контексту ASP.NET MVC (ViewContext) или специфичным помощникам (например, HtmlHelper).

В ASP.NET MVC 4 этот недостаток будет устранён. Кроме того, рассматривается возможность создания библиотек классов, состоящих из таких методов. Это позволит писать для них модульные тесты.

Поддержка асинхронных операций

В ASP.NET MVC 3 поддержка асинхронных операций требует относительно большого объема кода:

public void IndexAsync(string city) {
    AsyncManager.OutstandingOperations.Increment(2);

    NewsService newsService = new NewsService();
    newsService.GetHeadlinesCompleted += (sender, e) =>
    {
        AsyncManager.Parameters["headlines"] = e.Value;
        AsyncManager.OutstandingOperations.Decrement();
    };
    newsService.GetHeadlinesAsync();

    SportsService sportsService = new SportsService();
    sportsService.GetScoresCompleted += (sender, e) =>
    {
        AsyncManager.Parameters["scores"] = e.Value;
        AsyncManager.OutstandingOperations.Decrement();
    };
    sportsService.GetScoresAsync();
}

public ActionResult IndexCompleted(string[] headlines, string[] scores, string[] forecast) {
    return View("Common", new PortalViewModel  {
        NewsHeadlines = headlines,
        SportsScores = scores,
    });
}

ASP.NET MVC 4 будет поддерживать возможности, которые были представлены в Visual Studio Async CTP и войдут в C# 5. Тогда предыдущий пример можно будет переписать вот так:

public async Task<ActionResult> Index(string city) {
    var newsService = new NewsService();
    var sportsService = new SportsService();
    
    return View("Common",
        new PortalViewModel {
        NewsHeadlines = await newsService.GetHeadlinesAsync(),
        SportsScores = await sportsService.GetScoresAsync()
    });
}

Объединение CSS и JavaScript файлов

ASP.NET MVC 4 сможет объединять используемые в проекте css и js в один общий файл. При этом будут удаляться комментарии и ненужные пробелы. Это увеличит скорость и уменьшит объём загрузки, что приведет к более быстрому отображению страницы на у клиента.

Поддержка миграции данных для Entity Framework Code First.

В данный момент, модификация классов Модели ведет к изменению схемы базы данных. Как следствие, требуется пересоздание таблиц, что приводит к потери уже сохраненных в них данных. В ASP.NET MVC 4 этого можно будет избежать.

Другие планируемые возможности

  • Поддержка:
    • WCF Web API.
    • HTML 5 в шаблонах и вспомогательных методах (HTML helpers).
  • Улучшенная поддержка тестирования кода.
  • Более тесное и простое взаимодействие с Ajax.
  • Кэширование Представлений Razor и поддержка для Windows Server App Fabric caching provider.
  • Новый атрибут AreaAttribute для улучшения безопасности областей.

Ознакомиться со списком задач на английском языке можно тут: ASP.NET MVC 4 Roadmap. Кроме того, стоит еще раз напомнить, что свои замечания и предложения можно оставить на официальном форуме.