Пользователь
20,8
рейтинг
3 ноября 2014 в 17:58

Разработка → ASP.NET vNext Ликбез из песочницы

ASP*, .NET*
Ожидаемый релиз платформы ASP.NET (vNext) один из наиболее насыщенных в плане новшеств. Но вместе со всеми новинками к нам приходит и огромное число новых спецификаций, компонентов и других особенностей. В то же время мир .NET эволюционирует с такой скоростью, что просто следить за всеми новинками web-разработки от Microsoft почти не возможно. Особенно если вы до сих пор пишете на технологиях 10-летней давности (ASP.NET Web Forms, .NET 2.0) или выходец не из .NET мира веб-разработки. Возможно именно сейчас один из тех моментов когда можно пропустить все версии предыдущих обновлений и, начав с чистого листа, попасть в новый поток развития платформы. Рассмотрим основные пункты для этого:
  • vNext
  • Roslyn
  • OWIN
  • Katana
  • K


ASP.NET vNext


ASP.NET vNext — это следующая версия платформы ASP.NET. Она еще находится в разработке, но та часть, что уже была представлена широкой публика показывает, что изменений в платформе огромное количество. Цель нового релиза — создать трендовый стек для .NET для построения современных облачно-ориентированных приложений.
Основные особенности:
  • Открытый исходный код,
  • Кроссплатформенность,
  • Полностью базируется на новом Roslyn компиляторе,
  • MVC, Web API, Web Pages объединены в один фреймворк — MVC 6,
  • Dependency Injection встроен внутрь фреймворка,
  • Отсутствие зависимости от веб сервера и платформы для хостинга,
  • Больше не зависит от супер-библиотеки System.Web


Кроме огромной работы по обновлению платформы изменился и сам подход как эти изменения представляются сообществу. Социальная составляющая релиза очень интересна и следить за платформой стало очень удобно. Кроме блогов и новостей в социальных сетях выпускаются открытые предварительные версии где можно отлично пощупать платформу. А так же появился интересный формат Community Standup — можно задать вопросы или услышать онлайн самих разработчиков новой платформы. Все это происходит в веселой и интересной форме и позволяет наблюдать за разработкой платформы «от первого лица», почти участвуя в этом. Стендапы проходят в Hangouts каждую неделю и потом выкладываются в YouTube.



Roslyn


О новом компиляторе(платформе компиляторов) от Microsoft разговаривают уже давно. Первая предварительная версия была выпущена еще 3 года назад (в 2011). Но и планы на компилятор большие. Во-первых он тоже будет с открытым кодом (c 3-го апреля под лицензией Apache License 2.0). Во-вторых Roslyn поддерживает скриптовые сценарии. То есть выполнять куски кода можно на лету. Уже начали появляться продвинутые консоли с поддержкой C#. Так же в Roslyn есть свои API для использования разработчиками. Интересно, что сам компилятор написан на C#.

Что касается отличий в работе для рядового программиста пока сложно что-то сказать, теоретически с новым компилятором и новым типом ASP.NET проекта(веб сайт и веб приложение больше не разделены на разные проекты) время ожидания компиляции и обновление страницы при изменении исходного кода должна значительно сократится. В идеале — меняем код, нажимаем F5 и сайт сразу перед нами.

OWIN — Open Web Interface for .NET


Возможно именно благодаря этому стандарту и начались изменения с самой основы. В первую очередь это не платформа и не библиотека, а всего лишь спецификация, набор правил. OWIN — спецификация, что определяет стандартный интерфейс между веб сервером и веб приложением.

Часто употребляется другое название — промежуточный слой (Middleware). Его целью является разделить сервер и приложение, а так же (по скольку стандарт открыт) позволить и стимулировать разработку реализаций стандарта.
Какая же практическая ценность? Без OWIN-а вся работа приложения завязана на то, как веб сервер (IIS) разговаривает с ним. Если же присутствует промежуточный слой, то никакой жесткой привязки к веб серверу нет, и веб сервером может выступать все что угодно, что умеет работать с OWIN.

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

OWIN

Интересный момент в спецификации OWIN, что все взаимодействие между приложением и сервером через промежуточный слой сводится к единственной функции — делегату приложения.

using AppFunc = Func<IDictionary<string, object>, Task>;


Коллекция <string, object>, которую называют словарь окружения содержит параметры сервера, запрос и ответ. Она не может быть пустой и не может иметь значения null. Так же есть некоторые обязательные ключи, определённые спецификацией. Результатом обработки является объект типа Task, то есть инкапсуляция выполняемой задачи. Для каждого компонента на базе OWIN есть свой делегат приложения и во время выполнения сервер вызывает конвейер таких обработчиков. По скольку каждый делегат приложения возвращает Task то все компоненты в конвейере асинхронны.
Как было сказано выше OWIN — всего лишь спецификация, правила по которым должен работать промежуточный слой между сервером и приложением. Как же его реализовать практически или где взять уже реализованный?

Katana


Katana — одна из реализаций спецификации OWIN. Реализована компанией Microsft, потому еще можно встретить название Microsoft OWIN. Как и для других продуктов, связанных с ASP.NET vNext, исходный код проекта Katana открыт.

Если посмотреть что это значит для разработчиков то ответ — фактически изменения касаются только функционала, завязанного на работу с сервером. Больше не нужны настройки и события, типа global.asax. Новый стандарт — класс Startup. Минимально веб приложение теперь можно описать в несколько строк.

public class Startup
{
   public void Configuration(IAppBuilder app)
   {
      app.Run(context =>
      {
         context.Response.ContentType = "text/plain";
         return context.Response.WriteAsync("Hello Habr!");
      });
   }
} 


K


По мере изучения платформы вам часто будет встречаться K — Project K, K version manager, K runtime и даже консольная команда k. Что же такое K?

Изначально название новой платформы ASP.NET было Project K (возможно K от Katana). Названия Project K и ASP.NET vNext это фактически одно и тоже — новый релиз платформы серверной разработки.

KRuntime — основа платформы, программная среда с открытым исходным кодом. Вмещает в себя SDK и сам runtime(точнее kvm, kpm, kre).
kvm (K Version Manager) — менеджер версия платформы K. Практически — консольная команда для манипулирования версиями рантайма (инсталлировать, удалить, поменять версию по умолчанию).
kre (K Runtime Environment, реже Engine) — часть, что отвечает за компиляцию, SDK, все что нужно для того чтобы запустить ASP.NET vNext приложение. В принципе под конкретное приложение идет конкретная версия kre, более того вы можете запаковать вашу собственную версию. Для вашего приложения kre — это просто еще один из nuget пакетов.
kpm (K Package Manager) — менеджер пакетов. Манипулирует дополнительными пакетами, что нужны для приложения.
k (консольная команда) — входная точка для работы с платформой. Основная консольная команда для компиляции, запуска приложения.

Для понимания как эти команды используются на практике, рассмотрим следующий сценарий:

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.ps1'))"

kvm upgrade

git clone https://github.com/aspnet/Home.git

cd Home\samples\HelloWeb

kpm restore

k web

Это фактически все что нужно сделать для установки новой версии платформы и запуска простого приложения. После выполнения последней команды(k web) у вас на http://localhost:5001/ будет висеть элементарный сайт. Уйдет на выполнения команд меньше минуты.

Попробовать больше


На данный момент выпущены ASP.NET vNext CTP 4 и Visual Studio 14 CTP 4 (Community Technology Preview — 4 версия). Похоже, что это последняя альфа-версия и дальше продукт переходит в бету. Чтобы попробовать как работают новые технологии и оценить другие новинки можно скачать Visual Studio «14» CTP 4(но никаких гарантий что все заработает или же что не сломаются другие продукты нет) или же запустить на готовой виртуальной машине в Azure.
Виктор Коцюбан @Gbdrm
карма
18,0
рейтинг 20,8
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (15)

  • +2
    Кто-нибудь знает когда, хотя бы примерно, зарелизится ASP.NET vNext?
    • +4
      Релиз Visual Studio 14 планируется на 2015 год. Значит, скорее всего, релиз vNext тоже будет в 2015
      • +2
        Скорее бы уже, жду не дождусь, когда они наконец-то объединят Web API и MVC.
  • +1
    Грядут большие изменения…
    • –1
      И какие же они большие? Половину мы уже видели в mvc 5, так, вылизанная owin идеология.
      • +1
        Как по мне, кроме OWIN еще много новшеств, главные из них(которых нет в MVC5):
        • Возможность развернуть проект на любой платформе + сделать это простым скриптом,
        • MVC, Web API, Web Pages объединены в один фреймворк — MVC 6,
        • Dependency Injection встроен внутрь фреймворка,
        • Нет зависимости от супер-библиотеки System.Web
        • Возможность запаковать среду выполнения в nuget пакет
        • 0
          Ну это как раз и есть доработка идеологии «модульности» OWIN, кстати, по поводу отсутствия зависимости от «System.Web» интересно было бы почитать побольше, т.к. в самой реализации фреймворка, судя по гитхабу, такая зависимость есть.
          • 0
            Я не могу согласиться, что это всего лишь доработка OWIN, но это все субъективно.

            По поводу System.Web — а можно уточнить где именно зависимость?
            Я не нашел ее ни в примерах, типа:
            github.com/aspnet/Home/blob/master/samples/HelloMvc/project.json

            ни в модулях Microsoft.AspNet.Mvc
            github.com/aspnet/Mvc/tree/dev/src
            • +1
              Извиняюсь, упоминания были только в ранних версиях и сохранились в некоторых ветках, похоже сейчас связь с «System.Web» действительно отсутствует.
        • 0
          Если подумать, что почти весь АСП.НЕТ работает на ИИС, то эти все фишки с кроссплатформенностью для многих просто не нужны.

          Я не вижу, для себя лично, проблемы в зависимости от System.Web. Проект и так у меня собирается и разворачивается простым скриптом на MSBuild.

          Для чего все это МС делает? Учитывая что Ажур стал без приставки Виндоус, то становится примерно понятно для чего.
          • +1
            Если подумать, что почти весь АСП.НЕТ работает на ИИС, то эти все фишки с кроссплатформенностью для многих просто не нужны.

            В то же время, для многих они нужны, зачем завязываться на один конкретный веб сервер. Или зачем вообще хостить приложение в веб сервере если оно элементарное.

            Я не вижу, для себя лично, проблемы в зависимости от System.Web

            Это огромный модуль в котором куча нужной и не нужной логики. С таким подходом можно сделать одну библиотеку System.Super, в которой будет абсолютно все.
            Модульность — это удобно, легко, гибко и т.д.

            Для чего все это МС делает?

            Я немного по-другому воспринимаю эти изменения. «Это делает» не МС, а такие же люди как мы, которые следят за платформой, думают как ее улучшить и просто делают свою работу. Да, конечно есть некие стратегические цели компании, возможно даже распространение на не-Windows платформы, но вместе с тем есть и просто хорошие инициативы от людей.
            Если вы считаете, что надо делать что-то другое — можете предложить. Например на aspnet.uservoice.com
            • –1
              С таким подходом можно сделать одну библиотеку System.Super, в которой будет абсолютно все.

              Ну по сути так и есть. Называется это GAC ;) Утрированно, конечно, но мысль думаю ясна.

              Здесь, правда, МС тоже хочет меняться, и разрешит приложениям работать абсолютно изолированно.

              Опять же, это нужно для облачных приложений. Когда ты загружаешь один файл-контейнре, внутри него абсолютно все зависимости, код, данные. Вот такой app.zip абсолютно всё равно где будет выполняться. Там не нужно предустанавливать .NET Framework.
      • 0
        Вот и я хочу понять для себя — стоит ли для освоения практически с нуля приобретать книгу по MVC 5 или уже начинать с vNext.
        • +2
          У них очень много общего. Если у вас хорошо с английским (или, хотя бы, так себе) я бы порекомендовал попробовать туториалы:
          www.asp.net/mvc
          www.asp.net/vnext

          Для освоения с нуля это наверное идеальный вариант. Очень много и четко расписано, куча картинок и вставок кода. Для практики это удобнее чем книга.
  • –1
    Половину переделали, а то, что не переделали — полностью переименовали, чтобы еще больше все запутались ((

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.