Статьи

Зачем использовать .NET?

.NET традиционно не была предпочтительной средой сообщества SitePoint для веб-разработки. Простое сравнение активности на форумах PHP и .NET подчеркивает этот факт. Но с выпуском первой книги SitePoint по ASP.NET я подумал, что пора нам. NETERS гордиться и кричать с крыш, что делает эту технологию такой хорошей.

Однако цель этой статьи — не высмеивать другие технологии; это не «PHP против .NET Часть 2» . У каждой платформы, фреймворка и архитектуры есть свои сильные и слабые стороны, и .NET не является исключением. Итак, функции, выделенные в этой статье, не обсуждаются так, как будто они уникальны или обязательно лучше в .NET (хотя, конечно, большинство из них!), Но это должно дать тем, кто все еще погружается в .NET некоторые веские причины погрузиться прямо в.

Рамки

Без написания одной строки кода .NET предоставляет вам масштабируемую и мощную среду для написания кода. Прежде чем я объясню его преимущества, давайте немного поговорим о том, как именно это работает.

Когда приложение .NET компилируется, оно не компилируется в машинный код. Вместо этого .NET-приложения компилируются в IL (Intermediate Language), который похож на байт-код Java. Когда приложение выполняется, оно затем компилируется в собственный исполняемый код, которым управляет Common Language Runtime (CLR). Для нас, разработчиков, это управление означает, что CLR может гарантировать определенные аспекты функции вашего приложения, например, сбор мусора и обработку исключений, что придает ему надежность и безопасность. Эта архитектура известна как управляемый код и дает вашим приложениям большую терпимость из коробки.

В ASP.NET компиляция динамическая. .NET компилирует свои выходные данные при первом запросе страницы или ресурса. Последующие запросы затем используют этот скомпилированный вывод для создания ресурса, что приводит к чрезвычайно быстрым скомпилированным приложениям. Вот почему при первом запуске приложения ASP.NET перед возвращением запроса происходит небольшая задержка. Так что не волнуйтесь: все становится быстрее … намного быстрее!

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

Классы System также предоставляют различные методы для выполнения определенных задач. В качестве примера, скажем, нам нужно отправить электронное письмо. Мы можем использовать класс System.Web.Mail.SmtpMail для достижения этой цели:

 SmtpMail.Send("FROM","TO","SUBJECT","MESSAGE BODY"); 

Поскольку у нас есть определенная точка доступа к почтовому сервису (в данном случае, класс SmtpMail ), любые будущие изменения или улучшения в коде, отправляющем почту, координируются, и наше приложение автоматически получит выгоду. Сравните это с разработкой ASP, например, где было много разных реализаций для отправки электронной почты, часто с использованием COM. Кроме того, координация .NET повышает читабельность кода. Если мы рассматриваем систему как нового разработчика, класс SmtpMail может быть легко распознан и его функциональность приписана ему. Опять же, в отличие от ASP, где нам нужно распознавать конкретный COM-объект, используемый для понимания кода, это дает значительные преимущества.

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

Объектно-ориентированная архитектура

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

Давайте посмотрим на это в действии. Приведенный ниже код устанавливает заголовок веб-страницы при ее первой загрузке, а затем изменяет заголовок, когда пользователь нажимает кнопку:

 <%@ Page Language="C#" %>  <script runat="server">   void Button1_Click(object sender, EventArgs e)  {    titleTag.InnerText = "You clicked the button!";  }   void Page_Load(object sender, EventArgs e)  {    if (!IsPostBack)      titleTag.InnerText = "Page has loaded";  }   </script>  <html>  <head>  <title runat="server" id="titleTag"/>  </head>  <body>  <form runat="server">    <asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="Button"/>  </form>  </body>  </html> 

Обратите внимание, что для выполнения кода при первой загрузке страницы мы Page_OnLoad его в событие Page_OnLoad , которое запускается при первом запросе страницы. В процедурных языках, таких как ASP, этот код был бы помещен в самом начале страницы для достижения аналогичного результата. Однако, используя события, мы можем очень эффективно организовать наш код и контролировать его выполнение. Следовательно, когда пользователь нажимает на элемент управления Button, размещенный на странице, OnClick событие OnClick кнопки Button и OnClick наш код.

Код также предоставляет тег заголовка нашей страницы как объект, который готов для использования в нашем коде, добавляя runat="server" к тегу и присваивая ему идентификатор. Затем мы можем получить доступ к свойствам этого тега, в данном случае InnerHTML чтобы установить его значение. Это облегчает управление доступом и настройкой вывода страниц.

Эта объектная ориентация также означает, что у нас есть доступ к широкому спектру инкапсулированного кода и функциональности в виде серверных элементов управления. Как и в случае разработки на рабочем столе, вы можете перетаскивать элементы управления на свои страницы, устанавливать их внешний вид, местоположение и писать код для запуска определенных событий. Кнопка, определенная выше, является примером серверного элемента управления. .NET поставляется с целым рядом мощных серверных элементов управления, таких как DataGrid, который обеспечивает мощное и усовершенствованное отображение широкого диапазона данных, и элемент управления Panel, который позволяет разделить страницы на страницы, чтобы скрыть или отобразить различные группы элементов. по мере необходимости.

Все правила ориентации объекта применимы и к элементам управления. Точно так же, как вы можете создавать специализации классов, вы можете наследовать возможности элемента управления и добавлять свои собственные функции. Недавнее руководство по управлению списком RSS DataList показывает, насколько легко это реализовать.

Кэширование

Для полной производительности ASP.NET включает в себя очень мощную и простую в использовании систему кэширования. Любой объект может быть отправлен в кэш для последующего извлечения с полным контролем его жизненного цикла. Например, приведенный ниже код извлекает результаты из базы данных (для получения дополнительной информации см. Раздел «Доступ к данным позже»):

 SqlConnection conn = new SqlConnection(connectionString);  SqlDataAdapter a = new SqlDataAdapter("select * from mytable;", conn);  DataSet s = new DataSet();  a.Fill(s); 

SqlConnection conn = new SqlConnection(connectionString);  SqlDataAdapter a = new SqlDataAdapter("select * from mytable;", conn);  DataSet s = new DataSet();  a.Fill(s); 

Мы можем кэшировать результаты (в данном случае, представленные DataSet ) нашего запроса, поэтому последующим запросам не потребуется подключаться к базе данных для выполнения запроса. Насколько просто кэширование ASP.NET? Взглянем:

 Cache["databasequery"] = s; 

Как только объект сохранен в кеше, мы можем снова получить к нему доступ таким же простым способом:

 s = (DataSet)Cache["databasequery"]; 

Однако прежде чем мы получим доступ к кешу, важно сначала проверить, есть ли что-то доступное в кеше. Итак, введение кэширования в наш предыдущий код означает только 3 дополнительные строки кода:

 DataSet s = new DataSet();  if (Cache["databasequery"] == null) {  SqlConnection conn = new SqlConnection(connectionString);  SqlDataAdapter a = new SqlDataAdapter("select * from mytable;", conn);  a.Fill(s);  Cache["databasequery"] = s;  }  else  {  s = (DataSet)Cache["databasequery"];  } 

ASP.NET также может кэшировать полные страницы. Добавив директиву на страницу, кеширование может управляться параметром (например, http://mydomain.com/myresource.aspx?clearcache=true ) или IP-адресом запрашивающей стороны, и время ожидания для кеша может быть устанавливать.

Конфигурация XML

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

Давайте посмотрим это в действии. Следующий XML представляет собой фрагмент полного Web.config котором Web.config строка, содержащая строку подключения к базе данных, которую мы будем использовать в нашем приложении:

 <?xml version="1.0" encoding="utf-8" ?>  <configuration>  <appSettings>    <add key="ConnectionString"      value="server=localhost;database=test;uid=sa;pwd=password;"    />  </appSettings>  <system.web>    <customErrors mode="Off"/>  </system.web>  </configuration> 

Следует отметить, что ASP.NET делает файл Web.config недоступным через Интернет, что обеспечивает некоторую безопасность. Однако хранение конфиденциальной информации, например строк подключения, в любом месте вашего сервера в виде простого текста может создать угрозу безопасности. В этом случае вы можете сначала зашифровать строку подключения, прежде чем добавить ее в файл Web.config и расшифровать, когда это потребуется.

Для доступа через наш код к настройке, которую мы поместили в файл Web.config , мы используем следующий вызов:

 connString = ConfigurationSettings.AppSettings("ConnectionString"); 

Значение строки подключения теперь может быть изменено без изменения или перекомпиляции нашего кода.

Разделение кода

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

Сам код-это просто файл, который содержит исходный код страницы, который связан с веб-страницей (HTML) через объявление:

 <%@ Page language="c#" Codebehind="WebForm1.aspx.cs" Inherits="SitePoint.Webform1" %>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  <html>  <head>    <title>WebForm1</title>  </head>  <body>    <form id="Form1" method="post" runat="server">    </form>  </body>  </html> 

Файл с выделенным кодом, называемый здесь WebForm1.aspx.cs, должен содержать реализацию для объекта, наследуемого этой страницей, в данном случае определяемого как SitePoint.Webform1:

 using System;   namespace SitePoint {  public class WebForm1 : System.Web.UI.Page {     private void Page_Load(object sender, System.EventArgs e) {      //code to run at page load    }  }  } 

Мобильная поддержка

Мобильные устройства становятся чрезвычайно популярным методом доступа к информации в Интернете. .NET предоставляет вам инструменты для поддержки более 200 различных мобильных устройств из одного источника. Проанализировав любое устройство, запрашивающее вашу страницу, Mobile Internet Toolkit (MIT) автоматически разбивает ваши страницы в разной разметке (WML, HTML 3.0) и в различных форм-факторах (размер экрана, размеры карт), соответствующих данному устройству. ,

Это означает, что если мы получим доступ к нашей странице через браузер WAP, нам будет предоставлен вывод WML, разбитый на страницы по размеру дисплея нашего мобильного телефона и подключению к сети. Однако, если бы мы получили доступ к той же самой странице через КПК, нам бы был предоставлен HTML-вывод с гораздо большей информацией на каждой странице с учетом дополнительных функций и большего размера экрана, который наш КПК имеет на мобильном телефоне.

Доступ к данным

Одной из областей, в которой действительно процветает .NET, является расширяемые компоненты доступа к данным, известные как ADO.NET. ADO.NET обеспечивает высокоуровневый интерфейс практически для каждой существующей базы данных, с универсальным подключением через ODBC и OLE DB, а также специализированным и оптимизированным подключением для SQL Server, Oracle и MySQL (через сторонний компонент).

С ADO.NET все данные транспортируются в XML, что обеспечивает отличную совместимость между поставщиками данных и приложениями. Это также позволяет использовать XML-файлы для хранения данных, используя те же структуры и методы доступа, что и традиционные базы данных.

ADO.NET использует автономную модель, что означает, что приложения работают с данными локально, связываясь с сервером только для передачи или обновления данных. Это означает, что ваше приложение не так зависит от производительности базы данных, что повышает производительность и масштабируемость приложений за счет устранения узких мест.

С этими улучшениями происходит повышение производительности. Хотя доступ к данным по-прежнему не «подключи и работай», то есть вам все еще нужно иметь дело с операторами SQL, структурами данных и, в определенной степени, с вашей базой данных - он действительно вводит простые в использовании методы для доступа к данным. Например, вот код для извлечения набора строк из таблицы на работающем SQL Server и отображения первого поля в каждой строке:

 SqlConnection conn = new SqlConnection(connectionString);  SqlDataAdapter a = new SqlDataAdapter("select * from mytable;", conn);  DataSet s = new DataSet();  a.Fill(s);  foreach (DataRow dr in s.Tables[0].Rows)  {  Console.WriteLine(dr[0].ToString());  } 

Любой, кто имел дело с традиционным ADO или другими объектами доступа к данным, заметит, насколько чист и методичен доступ.

Мы также можем в любой момент прочитать и записать XML из нашего DataSet, используя методы ReadXML и WriteXML . Итак, чтобы расширить предыдущий пример, теперь мы можем вывести результаты нашего запроса в структурированном XML в файл fileName :

 SqlConnection conn = new SqlConnection(connectionString);  SqlDataAdapter a = new SqlDataAdapter("select * from mytable;", conn);  DataSet s = new DataSet();  a.Fill(s);  s.WriteXml(fileName); 
Языковое предпочтение

.NET не зависит от языка. Как упоминалось в начале этой статьи, все компиляторы .NET интерпретируют и компилируют ваш код на одном базовом языке IL (промежуточный язык, похожий на Java-байт-код) для запуска в CLR (Common Language Runtime). Это означает, что вы можете счастливо использовать Visual Basic.NET и получать ту же производительность и функциональность, что и у традиционно более мощных языков, таких как C ++. По сути, вы можете выбрать язык, который вы используете.

Как и в случае разговорных языков, доступность информации в форме примера отличается от языка к языку. Несмотря на то, что вы можете читать и выражать на эсперанто все, что пожелаете, для чтения большей части контента в Интернете вам все равно потребуется приличное знание английского языка. Это похоже на .NET. Вы можете выбрать Eiffel.NET в качестве языка для разработки ваших приложений, но большинство примеров и ссылок, которые вы найдете, будут написаны на C # или VB.NET. Чтобы применить их к Eiffel, вам также понадобится понимание этих языков.

Итак, каковы варианты? C # - это язык, разработанный Microsoft специально для .NET. Принимая синтаксический стиль, подобный стилю Java, C # признан чистым, современным языком и, благодаря своему сходству с Java, является отличным мостом от Java к .NET. Visual Basic .NET (VB.NET) расширяет Visual Basic 6, предлагая возможности объектно-ориентированного программирования в .NET. Короче говоря, любой, кто уже знаком с VB6, будет без проблем перейти на VB.NET.

Давайте рассмотрим пример кода: класс, написанный на C #, и его эквивалент в VB.NET:

 namespace sitepoint.csharp  {  public class HelloWorld  {    public string sayHello(string name)    {      return "Hello "+name+"!";    }  }  }   Namespace sitepoint.visualbasic  Public Class HelloWorld    Function sayHello(ByVal name As String) As String      Return "Hello " + name + "!"    End Function  End Class  End Namespace 

Один проект может даже использовать разные классы для разных файлов! Эта языковая терпимость также означает, что мы можем повторно использовать код, разработанный на разных языках, без головной боли прошлого. Никакой сортировки, никаких COM, только прозрачная языковая совместимость благодаря .NET.

Веб сервисы

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

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

Пример: ниже у нас есть пример класса Hello World, который использовался ранее в этой статье:

 namespace sitepoint.csharp  {  public class HelloWorld  {    public string sayHello(string name)    {      return "Hello "+name+"!";    }  }  } 

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

Однако, выставив метод sayHello в качестве веб-службы, мы можем разместить код в сети, вдали от нашей машины, а также позволить разработчикам других языков (не обязательно .NET-языков!) Использовать нашу функциональность.

Представление метода как веб-метода само по себе просто. Мы просто добавляем атрибут WebMethod в метод и наследуем поведение от класса WebService :

 using System.Web.Services;   namespace sitepoint.csharp  {  public class HelloWorld: WebService  {    [WebMethod]    public string sayHello(string name)    {      return "Hello "+name+"!";    }  }  } 

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

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

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

Это от Microsoft

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

Предварительные версии операционной системы Microsoft Longhorn следующего поколения показывают, как навыки, полученные при разработке .NET сегодня, будут напрямую перенесены в разработку Longhorn завтра. Это почти гарантирует ценность навыков .NET в обозримом будущем, что обычно очень трудно сказать в быстро развивающейся компьютерной индустрии.

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

Это дешево!

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

Для начала работы с .NET все, что вам нужно, - это коробка с установленной современной версией Windows (для ASP.NET требуется IIS 5.0 или выше, то есть Windows 2000 или XP Pro необходимы для обслуживания веб-приложений). Сама платформа является бесплатной, и сильная поддержка Microsoft для .NET означает, что достойная IDE в форме Web Matrix доступна бесплатно; однако, как и в большинстве сред разработки, для написания кода все, что вам нужно, это Блокнот.

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

Как упоминалось в разделе о доступе к данным этой статьи, .NET поддерживает практически все базы данных, доступные сегодня, включая свободно доступные базы данных с открытым исходным кодом, такие как MySQL. Тем не менее, у Microsoft также есть бесплатная база данных в форме MSDE, разработчик их базы данных SQL Server. Хотя Microsoft по-прежнему не разрешает коммерческое использование базы данных, MSDE предоставляет мощную, простую в администрировании базу данных, которую можно напрямую масштабировать до SQL Server.

Для получения дополнительной информации о том, где получить необходимые компоненты, а также подробное руководство по их установке, см. Первую главу «Создание собственного веб-сайта ASP.NET с использованием C # & VB.NET» .

Цены на веб-хостинг также неуклонно снижаются с момента выпуска .NET. Крупные хосты, такие как InterLand и 1 & 1, теперь предлагают полнофункциональные пакеты .NET по ценам, аналогичным традиционным конфигурациям LAMP (Linux-Apache-MySQL-PHP).

Будущее

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

Действуй

Я возбудил твой аппетит? Тогда попробуйте сами! А с созданием собственного веб-сайта ASP.NET, используя C # & VB.NET в качестве дружественного руководства, вы быстро создадите мощные веб-приложения .NET.