Я представляю сценарий ...

Вы использовали Javascript в течение последних X лет, чтобы добавить интерактивности веб-сайтам и приложениям.

Возможно, вы используете VanillaJs или библиотеку, такую ​​как jQuery, D3, Moment или Lodash, чтобы помочь вам добавить изюминку в свои веб-приложения.

И, возможно, вы использовали библиотеку / фреймворк, такую ​​как Backbone.js, AngularJs, React или VueJs, чтобы вы могли управлять браузером как платформой, создавая многофункциональные клиентские приложения, которые управляют и поддерживают состояние между щелчками, отправкой форм, навигацией и запросами XHR. .

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

Потрясающие! Поскольку NodeJs позволяет вам писать Javascript на стороне сервера, это не должно быть проблемой - на самом деле, в Интернете всегда шуметь от величия NodeJ как платформы.

К сожалению, здесь есть проблема. Разработчики серверной части вашей компании пишут все на C #, работающем на .NET. Они не так хорошо знают Javascript и, конечно же, не могут позволить себе рискнуть и поддержать совершенно новую платформу, такую ​​как NodeJs.

Но ты умный! Вы знаете, что если вы покажете, что понимаете, как передать свои навыки разработчика Javascript для браузера разработчику C # на сервере, вы получите лучший ответ от сильных мира сего.

Как и в мире Javascript, существует множество вариантов создания приложений C #, работающих на .NET, поэтому давайте обсудим, что это за варианты, и определим некоторые термины и жаргон, с которыми вы можете встретиться.

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

Что такое C # на самом деле?

C # - это многопарадигмальный язык программирования. Он имеет функциональные, объектно-ориентированные, императивные и декларативные особенности. Он достаточно гибкий, чтобы действительно хорошо справляться с большинством сценариев использования - мастер на все руки, мастер ничего не умеет, - но для повседневной разработки программного обеспечения это хорошо!

C # в первую очередь объектно-ориентированный. Итак, он основан на классах (все должно где-то существовать в классе) как шаблонах поведения и создании экземпляров этих классов для инкапсуляции состояния, подобно синтаксису нового класса Javascript. Он также строго типизирован. Все переменные и параметры имеют тип. Например, типом может быть класс, примитив (строка, целое число, логическое значение) или интерфейс (определяющий только Api объекта, а не любую реализацию).

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

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

Разработанный Microsoft, он немного изменился с момента своего первого публичного появления в 2002 году, добавляя новые языковые функции в постоянном темпе и адаптируясь к популярным шаблонам разработки программного обеспечения и языкового проектирования.

Разработчики Javascript за последние несколько лет будут хорошо знакомы с изменениями в версиях языка в последних ежегодных выпусках ECMAScript (2015–2018) и средствами настройки, такими как Babel или Typescript, для преобразования новых языковых функций для поддержки в старых браузерах.

Традиционно используемая разработчиками версия C # была напрямую привязана к версии популярной (и долгое время необходимой) IDE Microsoft Visual Studio. Новая версия языка вышла с новой версией IDE. Если вы открыли старое приложение в новой версии Visual Studio, вы можете начать обновление кода, чтобы использовать новые языковые функции.

Сейчас все по-другому, поскольку компилятор C # с открытым исходным кодом, Roslyn, существует независимо от Visual Studio. Это очень похоже на текущий мир инструментов для Javascript - языковые службы, анализ кода, инструменты транспиляции, полифиллы, которые существуют с каждым проектом. Roslyn может быть добавлен в проект C # в виде пакета, поэтому версия C #, которую может использовать разработчик, в целом не так зависит от версии Visual Studio, которую они установили. Но на практике разработчики обычно обновляют свои версии Visual Studio, чтобы получить новейшие и лучшие языковые функции и инструменты.

C # - это язык программирования с несколькими парадигмами. Он имеет функциональные, объектно-ориентированные, императивные и декларативные особенности.

Что такое .NET на самом деле?

.NET (или .NET Framework) - это базовая языковая среда. Это набор библиотек, которые Microsoft создала для разработчиков, чтобы помочь им выполнять свою работу и облегчить себе жизнь.

Для .NET в мире Javascript нет отличных выводов, и это из-за того, что Javascript возник в браузере как способ взаимодействия с DOM. NodeJs заполнил некоторые пробелы, предоставив доступ к таким вещам, как файловая система, сетевой стек и модель процесса, но чтобы по-настоящему погрузиться в .NET, нам нужно сравнить его с вещами, с которыми может быть знаком разработчик Javascript.

Представьте себе тщательно подобранное подмножество Npm. Эти пакеты встроены в вашу операционную систему, предназначены для взаимодействия (без случайных внутренних критических изменений) и обновляются большими инкрементными обновлениями. Они обслуживаются одной организацией, и этот набор пакетов предназначен для обеспечения надежной поддержки разработки как многофункциональных клиентских приложений, так и инструментов и служб на стороне сервера. Представьте себе мир, в котором Express, Pug, Angular и fs / fs-extra (среди множества других вещей) контролируются и создаются одной компанией.

При этом сравнении с Npm и сообществом Javascript быстро возникает вопрос. Есть ли что-нибудь .NET за пределами Microsoft?

Да! До появления Stackoverflow, Github и разработки социального программного обеспечения код и библиотеки .NET распространялись в виде исходного кода и файлов .dll (думаю, .min.js), загружаемых с веб-сайтов. Теперь разработчики .NET используют NuGet, который был представлен в 2010 году, для всех нужд управления пакетами.

NuGet на момент написания этой статьи содержит около 125 000 различных библиотек и уступает 700 000 Npm. В основном это связано с тем, что .NET как фреймворк предоставляет разработчикам так много из коробки, что сообществу не нужно было создавать столько.

Существует приложение командной строки, такое же, как Npm, называемое NuGet CLI, которое можно использовать для загрузки и установки пакетов, но, как и большинство вещей в традиционном мире .NET, пользовательский интерфейс в Visual Studio имеет тенденцию быть механизмом, который разработчики используют для добавления пакетов. к своим приложениям.

.NET как фреймворк - это набор библиотек, созданных для работы в основном в операционных системах Windows. Этот код библиотеки (и код приложения разработчика) работает в среде CLR (или Common Language Runtime). Эта среда выполнения / виртуальная машина предустановлена ​​вместе с .NET Framework на всех ПК с Windows.

Обратите внимание, что я ни разу не упомянул C # в этом разделе. Это потому, что все это не относится к C # языку. .NET Framework и CLR поддерживают множество языков - некоторые из них поддерживаются и разрабатываются в основном Microsoft (C #, VB.NET, Powershell), некоторые поддерживаются и разрабатываются в основном сообществом с открытым исходным кодом (PeachPie / PHP), а другие являются совместными усилиями. (F #).

Все эти различные языки, компилируемые в то, что работает на CLR, - это своего рода (здесь много размахивания руками!), Например ClosureScript, CoffeeScript и Typescript, все они компилируются для работы в среде выполнения Javascript в браузере / NodeJs (на самом деле это намного больше как языки, компилируемые в WebAssembly).

Все, что я упомянул до сих пор, не учитывает некоторые важные разработки за последние 4 года в экосистеме .NET, в частности .NET Core ...

.NET (или .NET Framework) - это базовый языковой фреймворк. Это набор библиотек, которые Microsoft создала для разработчиков, чтобы помочь им выполнять свою работу и облегчить себе жизнь.

Что такое .NET Core на самом деле?

.NET как фреймворк и среда выполнения существует уже некоторое время. Он был разработан для работы на ПК с Windows как монолит из библиотек и инфраструктуры. Между этими принципами и целями облачного хостинга Microsoft Azure есть небольшое несоответствие. Чтобы охватить самую широкую аудиторию, Azure необходимо поддерживать «Любой разработчик, любое приложение, любую платформу» (их слова, а не мои). Парадигма программирования, разработанная в основном для настольных ПК, не помогает Microsoft реализовать это видение. Частично отсюда и возник импульс для .NET Core.

Всегда существовала Mono, реализация .NET Framework и CLR с открытым исходным кодом, на которой выполнялась кроссплатформенность (в первую очередь Linux), но это не был проект, поддерживаемый или даже санкционированный Microsoft. Mono также никогда не имел доступа к ресурсам, реализующим .NET на стороне Windows, и поэтому всегда отставал или имел ограничения.

.NET Core - это перезагрузка .NET от Microsoft с упором на кроссплатформенность (Windows, Linux, OSX и даже Raspberry PI!), Модульную (используйте только то, что вам нужно), открытый исходный код и дизайн (хотите чтобы увидеть исходный код? Core CLR и Core framework), открытый для участия (вы можете открыть PR, если хотите!) и оптимизированный для настоящего и будущего, когда приложения развертываются в облаке.

Переход от традиционной (теперь называемой полной) .NET Framework к .NET Core не так сложен, как переход во фронтенд-разработке от создания приложений jQuery с помощью тега <script> на странице к SPA, Webpack, Typescript и CSSModules. но это миграция, которую многие команды и разработчики пытаются понять и решить.

Имея это в виду, новые приложения, скорее всего, будут создаваться с использованием .NET Core, и именно с этого вам следует начать. Если вы ищете ответы, код и документацию, проверьте даты в контенте и знайте, что все, что написано до 2015 года, предназначено для Full .NET Framework. Предположим, что все, что написано после 2017 года, предназначено для .NET Core.

В настоящее время последняя версия Full .NET Framework - 4.7.2, а последняя версия .NET Core - 2.1.3.

Примечание. Хотя я упомянул только Visual Studio как платформу / редактор / инструменты разработки для создания приложений .NET, для приложений .NET Core вы также можете использовать VS Code в Windows, Linux и OSX и Visual Studio для Mac в OSX.

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

.NET Core - это перезагрузка Microsoft .NET, ориентированная на кроссплатформенность, модульность, открытый исходный код и дизайн, открытую для участия и оптимизированную для настоящего и будущего, когда приложения развертываются в облаке.

Что такое ASP.NET на самом деле?

ASP.NET - это набор инструментов, библиотек и функций веб-разработки в рамках .NET Framework.

ASP.NET получил свое название от другой веб-технологии Microsoft под названием ASP (Active Server Pages), которая существовала до .NET и очень похожа на PHP. Это позволяло смешивать код (написанный в основном на VBScript) и HTML, выполнять их на сервере и отправлять полученный ответ HTML / Javascript обратно клиенту.

В наши дни ASP.NET - это действительно все, что связано с созданием интернет-сервисов (HTML / JSON / XML / Web Socket) с .NET Framework. Технологии, связанные с ASP, ушли в ASP.NET, и все, что осталось, - это брендинг - просто подумайте об ASP в ASP.NET как о семействе веб-технологий, а не как об аббревиатуре.

ASP.NET, как и остальная часть .NET, теперь существует в двух вариантах - Full Framework ASP.NET и ASP.NET Core.

Мои предыдущие комментарии о поиске контента и запуске новых проектов также применимы и здесь.

ASP.NET в течение последних 10 лет часто ассоциировался с ASP.NET MVC, архитектурой модель-представление-контроллер (похожей на Express.js) для рендеринга HTML на сервере в виде веб-страниц. На ASP.NET MVC сильно повлиял Ruby on Rails, и он до сих пор остается основным способом создания веб-приложений в мире .NET.

До MVC основное внимание уделялось другой парадигме, которая пыталась преодолеть разрыв между разработкой пользовательского интерфейса .NET Forms для настольных компьютеров и Интернетом - это называется веб-формы ASP.NET. Это все еще поддерживаемая технология, но здесь не ведется никаких новых разработок и, что более важно, она не является частью .NET Core, в то время как MVC определенно является ее частью.

ASP.NET MVC объединяет архитектурные шаблоны, такие как маршрутизация, конвейеры запросов / ответов и визуализация представления HTML, чтобы помочь разработчикам .NET создавать надежные веб-приложения. MVC имеет свой собственный специальный язык шаблонов под названием Razor, который позволяет разработчикам чередовать C # с HTML, чтобы делать многие вещи, которые вам полюбились в фреймворках SPA, таких как React, Vue и Angular.

Razor поддерживает создание повторяющегося содержимого из цикла, условного рендеринга и инкапсуляции содержимого (вроде как компоненты на стороне сервера). Это отличный опыт для разработчиков, который по-прежнему является основной технологией рендеринга в ASP.NET Core.

Было время, когда, если вы хотели создать веб-службу (также известную как API), вам нужно было либо использовать WCF (Windows Communication Foundation) и создать SOAP / XML API (слишком сложный, не забавный!), Либо принудительно MVC для рендеринга JSON вместо HTML для клиентов Javascript (техническая гимнастика, а не развлечение!).

Microsoft увидела надпись на стене и разработала веб-API ASP.NET, новый взгляд на веб-службы на основе HTTP. Веб-API ASP.NET очень похож на Full Framework ASP.NET MVC, но фактически заложил основу для .NET Core, отделяя части приложения от тесной связи с компонентами .NET и Windows, на которые опирался ASP.NET. в прошлом.

Теперь ASP.NET Core включает в себя как технологию создания HTML на стороне сервера MVC, так и технологии веб-служб на основе HTTP Web API. Если вы запустите новое приложение ASP.NET Core, вы сможете очень гибко выполнять обе функции в одном приложении.

ASP.NET - это набор инструментов, библиотек и функций веб-разработки в рамках платформы .NET.

Подожди, вот и все ?!

Бьюсь об заклад, вы чувствуете, что я многое рассказал - возможно, даже все, что можно сказать о C #, .NET и ASP.NET… но это определенно не так.

Если вы хотите узнать более подробную (и очень, очень интересную) историю .NET в Microsoft, вы можете послушать этот эпизод .NET Rocks, подкаст, посвященный .NET (и программированию в целом) за 1500 эпизодов и о полтора десятилетия.

Если вы хотите узнать больше о

  1. Сравнение C # с Javascript как языком программирования с точки зрения функций и принципов проектирования
  2. Сравнение .NET и CLR со средой выполнения Javascript и экосистемой Npm
  3. Как выглядит и работает образец веб-приложения с C # /. NET

… Тогда следите за обновлениями этой Части 1.

Если у вас есть какие-либо вопросы или просьбы о разъяснениях, оставьте их в комментариях, и я либо отвечу, либо попытаюсь ответить на них в одной из последующих частей этой серии.