Статьи

Взгляд через забор: ASP.NET

Моим первым языком программирования был C. Я начал пытаться научиться кодировать на компьютере с Windows. Я буквально потратил неделю, просто пытаясь разобрать свой PATH, чтобы компилятор C был доступен.

Пока я расспрашивал на форумах, кто-то предложил мне установить Linux, потому что он шел с предустановленным «gcc» (компилятор GNU C), и я мог просто начать писать код.

Я отправился на ubuntu.com и получил последнюю сборку, записал ее на диск, установил и, набрав «gcc hello.c», увидел, что он скомпилирован, я чувствовал удивление, ничего не предполагалось работать с первой попытки!

После этого я в основном отказался от Windows для большинства своих программных разработок и открыл для себя удивительный мир Bash, который казался примерно в шестьдесят восемь раз лучше, чем командная строка.

Большая часть сообщества Ruby работает на Linux или Mac OS X (последняя является моей текущей платформой). Мы рассматриваем Windows как непригодный материал, созданный для крупных предприятий, которым нравится двигаться медленно.

Я действительно хотел посмотреть, так ли это с C # и ASP.NET. В случае, если вы не знаете, C # — это язык программирования, который работает на Common Intermediate Langauge и был в основном разработан Microsoft (хотя он был стандартизирован и есть реализации с открытым исходным кодом, такие как Mono). ASP.NET — это веб-фреймворк, созданный Microsoft с использованием C # (его также можно использовать с Visual Basic).

Мои глаза впервые упали на стек Microsoft (то есть C # и ASP.NET), когда я пролистал книгу о C #. На мой взгляд, C # был языком, который был почти точно Java, миром, из которого я только что сбежал.

C #, казалось, предлагал всевозможные захватывающие функции, такие как делегаты, анонимные функции, замыкания и т. Д. Несмотря на то, что он имел синтаксис, аналогичный Java, базовые идеи часто были совершенно другими и гораздо более «крутыми».

Но лень распространялась, и я решил, что ASP.NET не был открытым исходным кодом, и веб-среда с закрытым исходным кодом не имела для меня никакого смысла.

И вот, Microsoft тогда открыла все источники ASP.NET. Я наконец решил, что хочу узнать об этом.

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

Кроме того, есть веб-страницы ASP.NET (также известные как Razor). По сути, это ответ Microsoft на PHP. По моему мнению, они сделали несколько вариантов дизайна, на которых PHP очень хорошо поучился бы, и в целом это очень хорошая платформа.

Наконец, есть ASP.NET MVC. Он использует MVC (так же, как Rails) для разделения проблем и дает вам инструменты для соединения Ms, Vs и Cs (опять же, как в Rails).

Я действительно не хотел использовать ASP.NET, потому что идея добавления состояния в протокол без сохранения состояния не нашла отклика у меня. Веб-страницы ASP.NET могли бы быть хорошим выбором, но я хотел сделать что-то более близкое к Rails. Я пошел с ASP.NET MVC.

Начиная

Начинать с Rails было действительно сложно для меня. Не было тонны очень хороших учебных пособий, которые не были бы устаревшими (я думаю, что я начал после основного выпуска), и мне потребовалось некоторое время, чтобы действительно понять, почему Rails предложил быструю разработку.

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

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

Окружение

Visual Studio (среда разработки, разработанная Microsoft для разработчиков на C #) может быть невероятно раздражающей, но в то же время невероятно полезной и быстрой.

Я обычно пишу весь свой код в Vim. Мне очень нравится навигационная система, и я довольно быстр с ней. Переезд в Visual Studio был болезненным. Вернулся к этой примитивной методологии использования только клавиш со стрелками, чтобы добраться до места (или мыши).

Но Visual Studio также предлагает некоторые довольно удивительные преимущества. Прежде всего, встроенный отладчик потрясающий. Я не уверен, что существует что-то подобное для Rails, но Microsoft проделала довольно аккуратную работу в этом аспекте стека. Просто использование «печатных» выражений в Ruby кажется немного устаревшим.

Visual Studio также обеспечивает хорошее автозаполнение наряду с хорошими утилитами для рефакторинга (многие говорили мне, что ReSharper делает это намного лучше, но я не смог попробовать).

Интерфейс, однако, имеет много специфических особенностей (я использовал Windows 7, а не 8, так что, возможно, это изменилось в новой версии, хотя, похоже, это не так). Доступно слишком много меню, а наиболее часто используемые предметы зарыты слишком далеко. Я понимаю, что Visual Studio — это большой кусок кода, но, по моему мнению, меню и общий интерфейс могут быть упрощены до такой степени, что вы действительно можете вспомнить, где находится этот пункт меню.

Во-вторых, мне не нравится идея платить за Microsoft Server, но Microsoft Azure действительно облегчает эту задачу для небольших разработчиков (она очень конкурентоспособна с Amazon EC2 и Heroku).

C #

Здесь сравнение становится интересным.

C # статически типизирован, Ruby динамически типизирован.

C # управляется корпорацией, Ruby разрабатывается группой независимых людей.

C # компилируется, Ruby интерпретируется.

Однако, как только мы посмотрим на эти изначально теги, C # и Ruby будут иметь много общего.

Прежде всего, C # не просто статически типизирован. У них также есть условия для динамической типизации, потому что во многих случаях компилятор может вывести тип (немного похоже на Haskell, но не совсем на том же уровне). Это не означает, что вы можете прогуляться по земле C # в ожидании ощущения Ruby, потому что вы не получите его.

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

Я скучал по быстрому ощущению Ruby без необходимости подбора типов, чего я не смог получить с помощью C #. Синтаксис C # не был таким лаконичным, как в Ruby и в целом, и иногда был немного шатким.

Тем не менее, у C # есть некоторые идеи, которые кажутся впереди Ruby. LINQ абсолютно невероятно. Короче говоря, LINQ (Language-Integrated Query) делает запросы данных первоклассными объектами в C #. Изначально это кажется пустой тратой пространства, но чем больше я узнаю об этом, тем более захватывающими кажутся возможности.

В целом, мне нравился C # за многие его качества, но я чувствовал, что он не был на том же уровне «веселья», что и Ruby. Тем не менее, я думаю, что функции ASP.NET MVC восполняют это.

ASP.NET MVC

ASP.NET MVC был просто потрясающим. Прежде всего, это то, где Visual Studio действительно ожил. Он чрезвычайно хорошо интегрирован с ASP.NET MVC и действительно поможет вам в этом. Я действительно не нашел что-то с Rails, которое бы делало то же самое (однако я не уверен, что переключился бы, даже если бы что-то подобное существовало; Vim очень хорошо работает для Rails).

Entity Framework, слой доступа к данным Microsoft, очень удобен в использовании. Мне нравится, как базы данных определяются с помощью EF Designer (однако я не уверен, что это то, что понравится всем), и весь процесс казался довольно быстрым и интуитивно понятным.

Представления не оставили мне ничего пропущенного в Rails — они казались чрезвычайно похожими на Rails ERB (хотя некоторые из вас, ребята из HAML, могут быть разочарованы).

Всем нам, Rubyists, нравится удобство, которое приносит Bundler, и долгое время ничего подобного этому «официально» не существовало для стека Microsoft. Однако это было исправлено. NuGet — это потрясающий инструмент, который позволяет быстро добавлять зависимости в ваши проекты.

Одно раздражение заключается в том, что вся архитектура контроллера казалась мне немного непонятной — для Rails это казалось слишком сложным. Кажется, что вся структура страдает от болезни «очень длинных имен переменных», которую усвоила Java.

Кроме того, я думал, что ASP.NET MVC действительно фальсифицирует предрассудки, которые мы имеем против него, будучи быстрым и продуктивным.

Вывод

Надеюсь, вам понравился мой взгляд на ASP.NET MVC с позиции разработчика Rails.

Тем не менее, я все еще учусь, поэтому вы можете найти некоторые несоответствия. Если вы это сделаете, пожалуйста, дайте мне знать в разделе комментариев!