Я начал следить за платформой .NET Core ещё с момента анонса. В своё время я успел ознакомится с версиями RC1, RC2 и сейчас активно изучаю возможности RTM версии. На сегодняшний момент .NET Core представляет собой легковесное модульное кросс-платформенное решение, позволяющее, помимо прочего, пользоваться всеми преимуществами классического .NET. В этой статье я предлагаю взглянуть на возможности обновлённой платформы и её перспективы.
Предыстория
Появившись в 2002 году, платформа .NET прошла долгий путь и смогла завоевать сильные позиции как надёжное решение корпоративного уровня. Долго время .NET была мультиплатформенной средой, позволяющей создавать серверные и десктопные приложения, приложения для мобильных и встраиваемых устройств, приложения для развёртывания в облачной инфраструктуре. Но при этом не являлась кроссплатформенной и поддерживала исключительно операционные системы семейства Windows.
Скорее всего, если вы слышали про .NET Core, то слышали про него то, что это новый .NET, который работает под Linux и Mac OS X. Именно возможность запуска платформы на ОС, отличных от Windows, и вызвала в свое время множество споров и обсуждений. Хотя, на самом деле, задолго до появления .NET Core уже существовали кроссплатформенные реализация .NET Framework. Два самых известных проекта — небезызвестный проект Mono, который не раз был отмечен даже самой Microsoft, и DotGNU, в свое время поддерживаемый Free Software Foundation. На сегодняшний день проект DotGNU уже закрылся, а вот Mono, наоборот, в последние два года получил активное развитие. Mono представляет собой open source реализацию .NET, поддерживающую операционные системы Linux и Mac OS X. Развивается Mono независимым сообществом разработчиков, которые занимаются реинжинирингом компонентов .NET и создают их кроссплатформенную реализацию. Ввиду этого Mono всегда была «догоняющей» платформой, в которой возможности оригинального .NET появлялись спустя довольно длительное время.
Главное отличие .NET Core от Mono состоит в том, что Mono — это именно перенос «большого» .NET, на платформу *nix. В то время, как .NET Core — это спроектированная практически с нуля платформа, изначально рассчитанная на работу с различными ОС. При этом большая часть кода которой писалась с тем, чтобы платформенно-специфичных зависимостей было как можно меньше. На приведенном ниже графике — соотношение общего кода платформы и кода специфичного для каждого отдельно взятого семейства ОС:
Что нового
По своей сути .NET Core — это практически полная перезагрузка стека .NET Framework. Из новой платформы по разным причинам был исключён ряд технологий. Следует понимать, что платформа .NET Core рассчитана в первую очередь на разработку для серверных и облачных решений. Для десктопных приложений лучше подходят классический .NET для Windows (с поддержкой WPF и Windows Forms) и Mono для Linux и Mac OS X (с поддержкой Windows Forms). Мобильные проекты можно создавать, используя Xamarin. На схеме показано, как технологии распределены внутри различных реализаций .NET:
Таким образом, в .NET Core были исключены:
— ASP.NET WebForms;
— WCF;
— WPF;
— Windows Forms.
Зато инструменты для разработки консольных и веб-приложения получили новый этап развития. При разработке большинство необходимых компонент приложения могут загружаться как отдельные модули через пакетный менеджер NuGet. Это позволяет уменьшить количество избыточных зависимостей и общий размер готового продукта.
На изображении ниже показано, как соотносятся между собой классический .NET и .NET Core.
Open Source. В отличии от классического .NET Framework, код которого по большей части является закрытым, код .NET Core полностью открыт и распространяется под лицензиями MIT и Apache2.
Стоит отметить, что после открытия кода .NET Core команда, занимающаяся разработкой проекта Mono, объявила о намерении объединения кодовой базы тех компонентов Mono, которые реализованы в .NET Core.
Работа в облаке. Как и проект, написанный на классическом .NET, проект на базе .NET Core достаточно легко перенести в облако. Microsoft Azure уже поддерживает размещение .NET Core проектов как в службах Application Services, так и на виртуальных машинах.
Библиотеки для работы с сервисами Microsoft Azure также уже начинают портироваться на .NET Core. Например, Windows Azure Storage уже доступна для работы. Соответственно Azure Storage Services могут использоваться в core-проектах.
Также, для проектов .NET Core появляется возможность размещения на площадках тех облачных провайдеров, которые не обеспечили поддержку Windows окружения, но при этом обладают другими привлекательными возможностями. Например, виртуальные серверы Digital Ocean за счет использования SSD дисков очень быстрые, но на данный момент позволяют разворачивать только ОС семейства Linux. Развернуть проект на .NET Core на подобно сервере не составит труда.
Инструменты для работы с .NET Core
Несмотря на то, что платформа только недавно получила статус RTM (release to market), уже имеется ряд удобных и мощных средств для разработки. Давайте рассмотрим подробнее, какие инструменты доступны уже сейчас для .NET Core разработчиков.
Project Rider — IDE от компании JetBrains, той самой компании, которая создала ReSharper, наверное, самый популярный плагин для Visual Studio. В основе Rider лежат IntelliJ IDEA (являющаяся основной для целого семейства IDE) и наработки, используемые в ReSharper. На данный момент Rider поддерживает разработку как под Mono, так и под .NET Core. Следует помнить, что на данный момент Rider находится в стадии EAP (Early Access Preview) и по сути не предназначен для использования в production, однако уже дает возможность оценить имеющийся потенциал. Rider доступен как под Windows, так и под Linux и Mac OS X.
Visual Studio Code — редактор (хотя уже практически IDE), разработанный компанией Microsoft на базе ядра Electron (того самого, на котором основан Atom). Благодаря большому количеству плагинов VS Code поддерживает разработку не только под Mono и .NET Core, но также и под другие языки, включая Go, C/C++, JavaScript, Typescript, etc. Visual Studio Code работает как под Windows, Linux и Mac OS X.
Visual Studio Community Edition — одна из редакций той самой Visual Studio, которая де факто уже стала эталоном IDE. При этом Community Edition распространяется бесплатно и может быть использована в разработке коммерческого ПО. Естественно, как флагманский продукт компании, именно эта IDE даёт наибольшее количество возможностей для как c .NET/.NET Core, так и с Mono. Единственное ограничение этой IDE — на данный момент существует исключительно версия под Windows. Что впрочем не мешает разрабатывать и отлаживать проекты, которые будут работать под Linux и Mac OS X.
ReSharper — наверное, самый популярный плагин для Visual Studio, который добавляет возможности анализа и рефакторинга кода. Буквально несколько дней назад вышла версия 2016.2, в которой реализована полная поддержка проектов на базе .NET Core.
Существующие решения
Уже сейчас есть несколько интересных проектов для построения веб-сайтов на базе .NET Core:
Platformus CMS. Как пишет о сам автор Дмитрий Сикорский: «Platformus CMS — молодая система управления содержимым веб-сайтов
Orchard. Orchard — система управления контентом с открытым исходным кодом от компании Microsoft. Первая версия CMS была анонсирован в марте 2010 года и основывалась на ASP.NET MVC. Вторая версия активно разрабатывается уже на основе ASP.NET Core. Подробности на сайте проекта.
Платформа корпоративного уровня для всех
Обычно, когда говорят про .NET, то в первую очередь подразумевают крупные корпоративные проекты с высокими требованиями к надёжности, масштабируемости и расширяемости. И при этом с дорогой инфраструктурой. Поэтому разработка под .NET всегда была достаточно недешёвым удовольствием. Однако с .NET Core все немного иначе.
Оставляя в наличии все плюсы классической версии, новая версия позволяет значительно снизить инфраструктурные затраты. Хостинг проекта на .NET Core обходится гораздо дешевле хостинга проекта на «большом» .NET. Так в Microsoft Azure самая дешёвая виртуальная машина с возможностью хостинга ASP.NET веб-приложения будет стоит от $13 в месяц. Размещение в службе Azure App Services в тарифе Shared будет стоить от $9 в месяц. При этом размещение проекта на виртуальном сервере у Digital Ocean обойдётся всего в $5 в месяц. При этом количество ресурсов выделяемых на приложение будет гораздо больше, чем у Shared-сервиса, а если сравнивать с виртуальной машиной от Azure, то конфигурация Digital Ocean будет выгодно отличаться наличием SSD диска.
Конечно, для крупных корпоративных проектов подобные суммы не имеют никакого значения. Более того, корпоративная среда достаточно консервативна. Поэтому, на мой взгляд, .NET Core начнёт широко использоваться в enterprise проектах не ранее чем через
Выводы
Исходя из всего вышесказанного, можно сделать вывод, что .NET Core позволяет небольшим проектам и стартапам получить все преимущества платформы корпоративного уровня, при этом предоставляя удобные и средства разработки, а также недорогую инфраструктуру. В будущем же неизбежен приход платформы и на крупный корпоративный рынок.
P.S. Если вы заинтересовались разработкой под .NET Core и хотите быть в курсе новостей и тенденция платформы, приглашаю вас присоединиться к группе .NET Core Ukraine User Group. В группе можно обмениваться полезной информацией и сообща находить ответы на возникающие вопросы. Группа ориентирована как на специалистов, которые уже знакомы со стеком технологий от Microsoft и хотели бы изучить возможность развёртывания своих проектов на операционных системах семейства *nix, так и на тех, кто только начинает изучать возможности .NET.