После того, как Microsoft PDC широко разрекламировал, было объявлено, что будущее Windows и .NET было объявлено, а текущий прогресс продемонстрирован. Для разработчиков это означает совершенно новый набор аббревиатур и технологий, с которыми нужно ознакомиться, и, мы надеемся, тоже немного взволнован. Цель этой статьи — дать разработчику ASP.NET возможность подготовиться к тому, что будет в .NET в ближайшем будущем.
Whidbey: Что это?
Whidbey — это кодовое имя для инструментов и технологий следующего поколения .NET. Думайте об этом как .NET 2.0. Находясь в выпуске Alpha, Whidbey уже полон дополнений, упрощений и полезных помощников.
Хотя эта статья будет сконцентрирована на самых больших преимуществах, представленных среднестатистическому разработчику ASP.NET, Whidbey — это нечто большее, чем я могу втиснуть в это короткое пространство. Те, кто заинтересован в дополнительной информации, должны следить за официальным веб-сайтом, ASP.NET, а также MSDN .
Мастер Страницы
Одна из самых больших проблем, с которыми сталкиваются веб-разработчики, заключается в том, как абстрагировать макет и внешний вид веб-приложения. Пользовательские базовые классы веб-форм и пользовательские элементы управления, представленные в ASP.NET, безусловно, помогли, поскольку позволяли разрабатывать пользовательские элементы интерфейса и типы страниц и интегрировать их в страницы. Однако размещение и компоновка компонентов страницы должны быть реплицированы на все страницы приложения, а это означает, что для переделки общего вида приложения требуется много ручных изменений.
ASP.NET 2.0 представляет мастер-страницы, простой и мощный механизм для создания шаблонов приложений. Как разработчик, вы можете создать главную страницу; то есть страница, которая определяет размещение и внешний вид элементов, составляющих страницы в вашем приложении. Страницы контента (как следует из названия) фактически определяют контент и данные, которые должны отображаться на странице. Эта информация затем объединяется с главной страницей, когда делается запрос, и готовая страница обслуживается:
Где ASP.NET фактически размещает ваш контент, вы указываете на своей главной странице с помощью заполнителей контента. Давайте посмотрим на простой пример, который показывает это в действии.
Ниже приведен код очень простой главной страницы:
<%@ Master Language="C#" %> <html> <body> <asp:ContentPlaceholder id="textContent" runat="server"> </asp:ContentPlaceholder> </body> </html>
Здесь есть два предмета интереса. Сначала мы сообщаем ASP.NET, что эта страница является главной страницей через атрибут Master
в директиве page. Во-вторых, мы определяем заполнитель содержимого, называемый textContent
. Любой, кто знаком с серверными элементами управления, увидит, что заполнитель контента может обрабатываться так же, как существующие серверные элементы управления.
По сути, заполнитель содержимого — это область страницы, которую мы можем заполнить содержимым, определенным на странице содержимого. Мы можем связать в заполнителе любые элементы управления, которые мы хотим включить, и завершенная страница унаследует все стили макета и разметку, определенные на главной странице. Ниже находится страница с контентом, которая добавляет элемент управления надписью с текстом «Hello World!». в заполнителе с именем textContent
:
<%@ Page Language="C#" Master="~/sitepoint.master" %> <script runat="server"> void Page_Load(object sender, System.EventArgs e) { lblText.Text = "Hello World!"; } </script> <asp:Content id="Content1" ContentPlaceholderID="textContent" runat="server"> <asp:Label runat="server" id="lblText"></asp:Label> </asp:Content>
Чтобы связать страницу для использования главной страницы, которую мы определили ранее, мы добавляем атрибут Master в директиву страницы, чтобы идентифицировать главную страницу (сохраненную в этом примере как sitepoint.master
).
Затем мы определяем контент, который мы хотели бы отображать внутри заполнителя контента на главной странице. Для этого мы используем новый серверный элемент управления, content
и устанавливаем для его атрибута ContentPlaceholder
значение ContentPlaceholder
мы хотим использовать. В нашем примере рассматриваемый textContent
называется textContent
.
Среди событий на странице содержимого (например, Page_Load
) мы получаем доступ к Label
управления Label
мы определили для добавления в заполнитель содержимого, как и любой другой элемент управления. Здесь свойство Text
установлено в «Hello World!»:
void Page_Load(object sender, System.EventArgs e) { lblText.Text = "Hello World!"; }
void Page_Load(object sender, System.EventArgs e) { lblText.Text = "Hello World!"; }
Настоящая красота заключается в том, что, если бы мы хотели изменить внешний вид наших страниц сейчас, все, что нам нужно было бы сделать, это изменить главную страницу; фактически макет был абстрагирован от содержимого страниц нашего приложения.
Главные страницы нескольких устройств
ASP.NET 2.0 также позволяет определять разные главные страницы для разных вызывающих устройств. Если посетитель использует Mozilla для просмотра вашего сайта, вы можете определить главную страницу, которая будет правильно отображаться в Mozilla; То же самое с Internet Explorer; То же самое с WAP-браузером. Наконец, приложения для нескольких устройств могут разрабатываться и централизованно управляться без каких-либо хлопот.
Так же, как мы связали страницу содержимого с главной страницей в приведенном выше примере, мы также можем определить главные страницы для использования на основе вызывающего устройства:
<%@ Page Language="C#" Master="sitepoint.master" Mozilla:master="mozilla.master" %>
В зависимости от запрашивающего устройства соответствующая главная страница связана с страницей содержимого. Это особенно полезно при написании кода на стороне клиента, который может быть несовместим с другими платформами, например, некоторые меню DHTML или скрипты JavaScripts.
Themeing
Но контроль ASP.NET 2.0 обеспечивает нам создание единого внешнего вида и не останавливается на этом. Введите: тема или скиннинг, как это обычно известно.
Используя скины, вы можете динамически изменять внешний вид элементов управления в вашей форме, используя файл скина. Файл обложки может определять как внешний вид элементов управления по умолчанию, так и специализации этих элементов управления, почти так же, как CSS работает сегодня. Однако, в отличие от CSS, создание тем позволяет устанавливать значения для любого свойства серверного элемента управления ASP.NET, включая свойства привязки данных, если они поддерживают темы.
Ниже приведен файл скина, который устанавливает внешний вид
Label
по умолчанию и специализацию элемента управления меткой. Мы можем получить доступ к этой специализации, установив атрибутskinID
элемента управления, отображаемого на страницах нашего приложения, равным идентификатору специализации.<!--DEFAULT --> <asp:Label runat="server" Font-Names="Arial" Font-Size="12pt" ForeColor="#ff0000" BackColor="transparent" /> <!--SPECIALISATION --> <asp:Label runat="server" SkinID="Title" Font-Names="Arial" Font-Size="18pt" ForeColor="#0000ff" BackColor="transparent" Font-Bold="true" />
Если мы сейчас укажем, что мы хотим использовать этот файл скина в нашем коде, все элементы управления надписями будут наследовать их внешний вид по умолчанию, который мы указали в скине (то есть, красный шрифт Arial размера 12). Тем не менее, если мы установим
skinID
элемента управленияLabel
в нашей форме равным нашей специализации, названной «Заголовок», будет использоваться внешний вид специализации.Давайте посмотрим, как мы можем использовать этот файл скина. Ниже приведен код формы, которая использует обложку (сохраненную в каталоге Themes / MyTheme) для управления внешним видом ее элементов управления:
<%@ Page Language="C#" Theme="MyTheme" %> <asp:Label runat="Server" SkinID="Title" id="titleLabel" Text="This is a title!"/> <p> <asp:Label runat="Server" Text="This is the default text"/> </p>
Первая метка наследует свой внешний вид от нашей специализации
Title
, тогда как вторая метка наследует свой внешний вид от значения по умолчанию, определенного в нашем файле скина, и, таким образом, не требует свойстваskinID
.Членские API
Почти все веб-приложения сегодня, независимо от того, основаны ли они на сообществах или электронной коммерции, требуют некоторой аутентификации для доступа. ASP.NET 1.x поставляется с несколькими средствами для упрощения задачи обеспечения безопасного доступа к приложениям, причем наиболее распространенным методом является проверка подлинности на основе форм. Разработчики могут защитить приложение, требуя, чтобы весь доступ был сначала направлен через форму входа в систему. После написания кода для аутентификации пользователя доступ был предоставлен, и пользователь был перенаправлен на исходный запрос.
Несмотря на это, процесс создания таблиц базы данных, управления файлами cookie сеанса, написания кода для добавления, удаления и изменения пользователей и предоставления утерянных паролей является непростым делом. На этапах ASP.NET 2.0, который поставляется с полным набором инструментов для создания и управления доступом и членством в ваших приложениях.
ASP.NET 2.0 вводит новые элементы управления, чтобы помочь создать контроль доступа. Элемент управления Login является универсальным решением для создания формы входа. Элемент управления поставляется в комплекте с поддержкой постоянства, что означает, что удобная функция «Запомнить меня» обрабатывается для вас.
LoginStatus
управленияLoginStatus
позволяет отображать текущий статус входа для пользователя и предоставляет автоматические ссылки на «Выход из системы» и «Вход в систему». Точно так же элемент управленияLoginName
позволяет быстро отображать доступ к имени пользователя, аLoginView
управленияLoginView
работает так же, как традиционнаяPanel
; тем не менее, он позволяет автоматически создавать разные представления для разных статусов входа. Наконец, элемент управленияPasswordRecovery
обрабатывает слишком знакомое «Забыли пароль?» функциональность.Вам предоставляется объект Членства, который позволяет вам управлять своим членством. Поставщики данных предоставляют ссылки между вашей базой данных и элементами управления и объектами, и они могут быть определены в файле
web.config
. Два провайдера готовы из коробки, с поддержкой SQL Server и Access (что неудивительно). Тем не менее, другие поставщики данных могут быть реализованы с использованием стандартного набора интерфейсов - не требуется грязного кодирования базы данных!Давайте возьмем пример. Все, что теперь требуется для предоставления доступа пользователю, это элемент управления Login:
<html> <body> <form runat="server"> <asp:Login runat="server" /> </form> </body> </html>
<html> <body> <form runat="server"> <asp:Login runat="server" /> </form> </body> </html>
Когда пользователь нажимает кнопку «Войти»,
Login_Click
событиеLogin_Click
, и именно здесь мы можем аутентифицировать пользователя:void Login_Click(Object Sender, EventArgs E) { if (Membership.ValidateUser(Username.Text, Password.Text)) { FormsAuthentication.RedirectFromLoginPage( Username.Text, false); } else { LoginMessage.Text = "Wrong username or password. Please try again."; } }
Вся тяжелая работа сделана для нас.
Membership.ValidateUser
запрашивает нашу базу данных, чтобы узнать, существует ли пользователь, и, если это так, мы перенаправляем пользователя на страницу, к которой был запрошен доступ.воплощение
Как видите, это один комплексный набор инструментов! Но это далеко от того момента, когда ASP.NET 2.0 оставляет вас наедине с собой. Кроме того, он предоставляет вам объект
Profile
.Объект
Profile
позволяет вам хранить информацию о пользователе в упрощенном виде. Разделprofile
может быть добавлен в файлweb.config
приложения, и могут быть добавлены различные свойства для создания профиля пользователя:<profile> <property name="Name" type="System.String "/> <property name="Age" type="System.Integer "/> </profile>
Затем к свойствам можно получить доступ в коде через объект
Profile
:Широкое использование Microsoft IntelliSense означает, что все добавленные вами свойства отображаются в привычном раскрывающемся списке автоматического завершения при разработке с использованием Visual Studio .NET.
Вы также можете определить группы для структурирования ваших профилей. Например, у вас может быть группа под названием «PersonalInformation», полная свойств о личных данных пользователей, и группа под названием «Обязанности», полная свойств, определяющих роли пользователей в организации:
<profile> <group name="PersonalInformation"> <property name="Name" type="System.String "/> <property name="Age" type="System.Integer "/> </group> <group name="Responsibilities"> <property name="AdminRights" type="System.Boolean"/> </group> </profile>
В вашем коде они теперь доступны как:
Как и в случае с API членства, для работы профилей необходимо указать поставщика данных. Профили затем связываются с пользователем при входе в систему, что облегчает беспроблемную и беспроблемную обработку вашего сайта.
Работая с API-интерфейсом «Членство» и темами, которые мы обсуждали ранее, вы можете предоставить пользователю возможность полностью настроить внешний вид своего сайта. Веб-части и веб-зоны, знакомые всем, у кого есть опыт работы с SharePoint, даже позволяют автоматизировать разработку портала с помощью информационных панелей. Следовательно, с ASP.NET 2.0 разработчик может создавать настраиваемые и защищенные приложения для пользователей без особых усилий.
Адаптивный рендеринг устройств
Mobile Internet Toolkit (MMIT) был отличным дополнением к ASP.NET. Используя адаптивный рендеринг, инструментарий позволял создавать страницы, которые адаптировали свои выходные данные в соответствии с вызывающим устройством. Например, мобильный телефон, получающий доступ к странице, может обслуживаться с выходом WML; КПК, выход HTML 3.0; и так далее. Однако все еще необходимо было
MobileWebForms
эти страницы какMobileWebForms
, а не как стандартныеWebForms
, поэтому для создания действительно адаптивных веб-страниц потребовалось немного больше работы.ASP.NET 2.0 имеет встроенный адаптивный рендеринг, что означает отсутствие разделения. Кроме того, могут быть рассмотрены различные браузеры, поэтому без каких-либо усилий с вашей стороны страницы будут отображаться как WML, HTML или XHTML, в зависимости от того, какое устройство вызывает.
Предварительная компиляция веб-приложений
Одним из неприятных свойств ASP.NET 1.x было то, что после того, как веб-приложение было построено, его все равно нужно было скомпилировать. Это проявляется в виде небольшой задержки при отображении страницы после создания и развертывания новой сборки. На самом деле происходило то, что при первом запросе страницы код страницы компилировался, и будущие запросы использовали этот скомпилированный вывод.
В ASP.NET 2.0 приложение (как веб-страницы, так и код) можно предварительно скомпилировать в сборки, что позволяет решить эту проблему. Как интересный побочный эффект, это также означает лучший интеллектуальный контроль контента, поскольку ваш сайт просто запускается из набора скомпилированных сборок, удаляя код и разметку из хранилища вашего сайта. Это также помогает обнаружить ошибки в коде, который не скомпилирован в сборку, например, встроенный код на странице .aspx. Поскольку весь сайт компилируется на вашем конце, а не на сервере, компилятор будет отмечать ошибки так же, как если бы вы использовали IDE.
Visual Studio .NET "Whidbey"
Visual Studio .NET - фантастическая среда разработки для разработки приложений ASP.NET, но ее версия Whidbey сделает ее еще более умной и простой в использовании. Я надеялся, что это будет релиз 2003 года.
Для разработчиков Visual Basic будет реализовано пропущенное «Редактировать и продолжить», то есть полная перекомпиляция не требуется для каждого изменения, внесенного во время выполнения. Visual Basic также упрощается с акцентом на возвращение его к более визуальному аспекту разработки. Это означает, что среда IDE и языковое ядро автоматически выполнят для вас гораздо больше утомительных задач. Это не каждому по вкусу разработки, но он предвещает возврат к старому Visual Basic, не теряя при этом каких-либо значительных дополнений, таких как поддержка OO, перегрузка операторов и встроенная документация XML.
Разработчики C # награждаются широким спектром новых языковых дополнений, включая дженерики и итераторы. Универсальный тип может использоваться для создания кода, который остается неизменным, в то время как тип данных параметров может изменяться при каждом вызове. Это может быть достигнуто сегодня с помощью полиморфизма и приведения типов, но универсальные шаблоны позволяют избежать всех ловушек и неопределенности в достижении этой функциональности, как вы бы ее кодировали сегодня. Итераторы позволяют «типам объявлять, как оператор
foreach
будет перебирать их элементы». Это означает, что типу больше не нужно будет реализовыватьGetEnumerator
. ХотяGetEnumerator
идеально подходит для простых структур списков, он не может эффективно использоваться в более сложных структурах, таких как двоичное дерево.Visual Studio .NET Whidbey предоставляет гораздо больше дополнений, настроек и улучшений. IntelliSense умнее, рефакторинг поддерживается, а отладка более интеллектуальна благодаря автоматическим часам. IntelliTasks автоматически завершает часто используемый код, такой как
switch
иif...else
. Он даже позволяет вам определять свои собственные блоки кода для автозаполнения. Производительность, безусловно, будет увеличена.Быстрое слово на Индиго
Помимо создания инфраструктуры распределенных веб-сервисов, уже доступной для разработчика ASP.NET, Whidbey также представляет Indigo, новую инфраструктуру, которая позволяет создавать полноценные системы из набора служб, а не писать классы, как при традиционной разработке ОО. Самым большим его преимуществом является то, что Indigo позволяет быстро разрабатывать сервисные системы, которые могут быть полностью обработаны с помощью небольшого кода.
Резюме
Ну, есть краткий обзор того, что разработчики ASP.NET могут ожидать в ближайшем будущем. И я даже не упомянул преемника SQL Server Yukon и более тесные связи с разработкой Longhorn. В двух словах, Whidbey означает меньше кода для написания, более умные инструменты разработки и более простое администрирование. Ролл, 2005!