Я начал следить за платформой .NET Core ещё с момента анонса. В своё время я успел ознакомится с версиями RC1, RC2 и сейчас активно изучаю возможности RTM версии. На сегодняшний момент .NET Core представляет собой легковесное модульное кросс-платформенное решение, позволяющее, помимо прочего, пользоваться всеми преимуществами классического .NET. В этой статье я предлагаю взглянуть на возможности обновлённой платформы и её перспективы.
Предыстория
Появившись в 2002 году, платформа .NET прошла долгий путь и смогла завоевать сильные позиции как надёжное решение корпоративного уровня. Долго время .NET была мультиплатформенной средой, позволяющей создавать серверные и десктопные приложения, приложения для мобильных и встраиваемых устройств, приложения для развёртывания в облачной инфраструктуре. Но при этом не являлась кроссплатформенной и поддерживала исключительно операционные системы семейства Windows.
Скорее всего, если вы слышали про .NET Core, то слышали про него то, что это новый .NET, который работает под Linux и Mac OS X. Именно возможность запуска платформы на ОС, отличных от Windows, и вызвала в свое время множество споров и обсуждений. Хотя, на самом деле, задолго до появления .NET Core уже существовали кроссплатформенные реализация .NET Framework.
Что лучше ASP.NET или ASP.NET Core?
Два самых известных проекта — небезызвестный проект 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 и что это такое?
Таким образом, в .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 — молодая система управления содержимым веб-сайтов альфа на момент написания статьи), построена на базе не менее молодых ASP.NET Core и ExtCore Framework. Написана CMS на C#. Благодаря возможностям ASP.NET Core, она одинаково хорошо может работать на Windows, Linux и Mac.
Сама исполняемая среда, необходимая для работы любого приложения на .NET Core, может быть как установлена отдельно, так и интегрирована непосредственно в само приложение». Подробнее о 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 проектах не ранее чем через как это было с ASP.NET MVC.
В текущем же своём виде новая платформа будет играть в том же сегменте, где сейчас находятся такие технологии, как Node.js и Ruby — это небольшие проекты с ограниченным бюджетом и невысокой архитектурной сложностью. Крупные решения как и прежде будут реализовываться на «большом». NET. Таким образом, целевой аудиторией .NET являются стартапы и рынок малого и среднего бизнеса.
Выводы
Исходя из всего вышесказанного, можно сделать вывод, что .NET Core позволяет небольшим проектам и стартапам получить все преимущества платформы корпоративного уровня, при этом предоставляя удобные и средства разработки, а также недорогую инфраструктуру. В будущем же неизбежен приход платформы и на крупный корпоративный рынок.
P.S. Если вы заинтересовались разработкой под .NET Core и хотите быть в курсе новостей и тенденция платформы, приглашаю вас присоединиться к группе .NET Core Ukraine User Group. В группе можно обмениваться полезной информацией и сообща находить ответы на возникающие вопросы. Группа ориентирована как на специалистов, которые уже знакомы со стеком технологий от Microsoft и хотели бы изучить возможность развёртывания своих проектов на операционных системах семейства *nix, так и на тех, кто только начинает изучать возможности .NET.
Похожие статьи:
Микола Максименко — Research Lead у Rhttp://gs-studio.com/news-about-it/30327-net-core—» target=»_blank»]gs-studio.com[/mask_link]
Когда стоит переходить на ASP.NET Core?
12.02.2018
655
Рейтинг: 5 . Проголосовало: 5
Вы проголосовали:
Для голосования нужно авторизироваться
Прошло много времени с момента релиза ASP.NET Core 1.0. Затем появились версии 1.1, 2.0… В общем и целом серверные компоненты и технология оказались достаточно качественными, в них было замечено всего лишь несколько багов. Кроме того, начиная с вышеупомянутой версии 1.1, было добавлено бессчётное множество различных полезных примочек к Entity Framework Core и самой ASP.NET Core.
Помимо прочего, стоит также отметить радикальные отличия в структуре проектов, которые могут показаться слегка непривычными, но являются жизненно необходимыми для взаимодействия проектов .Net Core с другими типами проектов. Но ожиданиям качественного инструмента пришел конец. Произошел релиз Visual Studio 2017, и она успела зарекомендовать себя как достаточно стабильная версия.
К тому же я без проблем сумел перенести мои проекты на базе project.json в новый формат файлов MSBuild без всяких проблем. Помимо прочего, стоит также отметить целую серию приятных улучшений стандартной среды языка .NET. Мы долго ждали и дождались – наконец-то стандарт .NET Core (вместе с технологией ASP.NET Core) успешно захватывает IT-рынок и обладает целым рядом полезных инструментов для разработки. Если вы из компании, которая от стольких лет ожидания успела натереть себе мозоль – определенно, вам есть чему радоваться.
Итак, ASP.NET Core сейчас уже на полках. Так в каких случаях нам стоит забыть про старый добрый ASP.NET и опробовать его кроссплатформенную версию? Позволю себе поделиться мнением.
Новые проекты
Если вы начинаете разработку нового проекта с использованием MVC-подхода и/или Web API, вам определенно нужно обратить свое внимание на ASP.NET Core. Технология содержит в себе целую серию значительных улучшений, которые заметно отличают ее от предшественницы. Помимо прочего, она также может похвастаться первоклассной системой внедрения зависимостей.
ASP.NET Core также обладает специальными tag-helper`ами. Используя сервис TestServer, вы запросто сумеете производить локальные тесты прямо на свое ПК (забудьте про падения через неверную конфигурация фаервола). Web API теперь внедрены в ASP.NET Core MVC, потому теперь нет никакой необходимости использовать сторонние библиотеки с кучей дублирующих компонентов. Также скорость работы значительно выше, плюс, помимо прочего, арсенал может похвастаться значительно большим количеством опций, нежели MVC5/WebAPI2, который в значительной мере привязан к IIS.
Тема связана со специальностями:
Но что, если проект имеет среди зависимостей сторонние библиотеки (собственные или чьи-то еще), которые требуют полноценной среды .NET Framework, не включенной в .NET Core?
Нет никаких проблем. При желании в ASP.NET Core можно включить полноценный .NET Framework. Желаете использовать ваш Entity Framework 6 или NHibernate для работы с данными? Да ради Бога. Все прекрасно будет работать и в ASP.NET Core.
Единственное, что вы от этого утратите – это кроссплатформенность, ибо эти сервисы могут быть запущены только в рамках Windows-сервера.
У меня нет времени переучивать команду на ASP.NET Core!
На счастье, переход на новую платформу не займет много времени, если ваша команда уже знакома с ASP.NET MVC и/или Web API. Концепция Core – использовать все, что было раньше, но значительно лучше. Контроллеры и представления никуда не делись. Представления все еще используют Razor. Маршрутизация по сути своей осталась прежней – она даже стала немного проще.
Фильтры также особо не изменились, а Web API добавили своего удобства в использовании (так как они были интегрированы в MVC). Конечно, отличия все же есть, но это не критично. Несколько новых вещей, вроде того, как запускается приложение или как работает middleware, выучить придется, но в целом опыт работы на предыдущей ASP.NET Core MVC тут будет решать очень многое.
Я хочу поместить приложение в контейнер на Linux!
Тогда вы можете желать только ASP.NET Core. Вы не сможете использовать библиотеки из среды .NET Framework, но что касательно стандартных компонентов .NET Core – полный вперед. И да, вы также можете помещать свои приложения под Azure на Linux.
Судьба приложений на ASP.NET MVC 5 и/или Web API 2
- Сама поддержка. Если вы бы хотели деплоить приложение и его сервер вместе, без привязки к IIS – Core, – это однозначно ваш выбор.
- Поддержка различных платформ. Порой использование Windows-ориентированных серверов может быть дороже прочих других. Возможно, вы могли слышать об поддержке контейнеров, Докера и так далее. Core все это поддерживает – причем на очень даже приличном уровне.
- Множественные приложения. Приходилось ли вам запускать несколько экземпляров приложения на одной и той же машине? ASP.NET Core позволит это делать значительно удобнее и эффективнее, нежели традиционный ASP.NET.
- Тестирование и Domain-Driven Design (DDD). Если ваша команда следует этому подходу, пишет тестируемое программное обеспечение, то ASP.NET Core (и Entity Framework Core) привнесёт целый ряд полезных фич, которые значительно могут упростить жизнь.
Видео курсы по схожей тематике:
Тестирование ASP.NET Core MVC приложений
Основы ASP.NET MVC
ASP.NET MVC 5 Базовый
Программы Web Forms
Если ваше приложение базируется на веб-формах, возможно, вам лучше всего будет оставаться на ASP.NET. Microsoft активно инвестирует в эту технологию. Существует множество способов улучшить качество кода, используя внедрение зависимостей и прочее. Но смена платформы на ASP.NET Core MVC будет такой же «болезненной», как и переход на ASP.NET MVC 5,4,3,2,1.
Что хуже, используя MVC 5, вы можете запускать страницы отдельно друг от друга, но проделать подобное с ASP.NET Core не представляется возможным. Лично я могу посоветовать оставаться на веб-формах до тех пор, пока приложение не потребует полноценной замены. В плане нагрузки на данные, потребовалось бы применить стиль SPA-приложений со значительно большим количеством клиентского кода и фрейморков типа Angular 2, или React.
Другие размышления
Хотя Visual Studio – прекрасный инструмент для разработки приложений, эта среда не бесплатная (за исключением комьнити-версии). Помимо прочего, она Windows-ориентированная (да, есть VS для MacOS, но это совершенно другое приложение). Если же студия для вас по причине цены или размеров неприемлема, .NET Core будет воистину полезным приобретением. Вы можете на MacOS, Linux (и, разумеется, под Windows) работать в Visual Studio Code!
Подобным образом, если ваши приложения больше ориентированы на клиентскую часть, ASP.NET Core порадует более облегченными размерами. В то время, как фронтендеры превозносят NodeJS как быструю технологию (и ее возможность исполнять js-код на сервере), ASP.NET Core может также исполнять Node.JS на сервере (и вы также можете работать под JS на сервере, если вам захочется). Используя TechEmpower, ASP.NET Core, развернутый с использованием Kestrel, может обрабатывать до 1 миллиона запросов за секунду на том же ПК и в рамках того же приложения, в то время, как NodeJS обрабатывает всего около 175 тысяч в секунду.
Подведем итоги
Безусловно, ваш опыт и ваше мнение может сильно отличаться от моего, потому вопрос о том, стоит ли переходить на ASP.NET Core для некоторых может остаться открытым. И, конечно, ASP.NET Core далеко не единственная технология, используя которую вы будете создавать свое следующее веб-приложение. Однако, тема этой статьи как раз-таки ASP.NET Core, с которым мне приходилось долго проработать.
К тому же, написано очень много официальной документации на официальном сайте Microsoft. Я не советую переходить на ASP.NET Core лишь потому, что он такой новый и весь из себя красивый. Решение перейти должно быть тщательно взвешенным и подкрепленным весомыми аргументами, которые я постарался привести в своей статье.
Бесплатные вебинары по схожей тематике:
Создание приложений на ASP.NET MVC 5
Начало работы с ASP.NET Web API 2.0
Практический опыт миграции с Web API на микросервисную архитектуру (продолжение)
Что дальше?
Разработка ASP.NET Core продолжается. Уверен, версия 2.0 – далеко не последняя! Было бы неплохо взглянуть на обновленный SignalR и новую функциональность разор-страниц.
Автор перевода: Евгений Лукашук
Источник: itvdn.com