РЕШЕНИЯ

Сегодня в области разработки ПО можно наблюдать очередную волну активности по переводу имеющихся клиент-серверных корпоративных приложений в среду Web. И даже те, кто пока сомневается в необходимости подобной конверсии, в скором времени обязательно будут ее осуществлять, следуя моде и принципу “так делают все”. В данной статье мы обрисуем, каким образом можно решить подобную задачу с помощью технологии Microsoft .Net.

Традиционная среда и Web: различия пользовательского интерфейса

Пользовательский интерфейс в операционной системе Windows является “event-driven” - т. е. управляется внешними событиями и строится из элементов управления (controls). Windows предлагает встроенную реализацию классических идей по взаимодействию человека и машины - поля ввода, списки и т. д. Приложение реагирует на событие, возбуждаемое элементом управления в момент изменения его состояния (например, смена текущего элемента в списке). Встроенные элементы управления базируются на интерфейсах прикладного программирования (API) операционной системы. С помощью API разработчики могут создавать собственные элементы, а значит, интерфейсы любой сложности.

Идеология системы Web в корне отличается от описанной. Эта платформа не задумывалась как среда для разработки приложений, ее изначальная цель - создание гипертекста, структурирование информации и построение простейших форм для ввода данных. Для описания таких данных используется язык разметки гипертекста - HTML. Средство визуализации - уже не операционная система, а браузер, который получает HTML-страницы и отображает их на экране. HTML по природе статичен, он не подходит для создания форм, где одни элементы управления зависят от других.

Позже появился Dynamic HTML, способный представить HTML-страницы в рамках объектной модели, к которой приложен язык программирования. Наполнение страницы можно менять на стороне клиента, что позволяет создавать страницы, реагирующие на действия пользователей без обращения к серверу. Однако DHTML ограничен рамками HTML: нельзя создать новый элемент управления, а встроенные элементы плохо расширяемы.

Браузеры содержат “двери”, выводящие за пределы HTML: которые позволяют на страницу поместить объект, выполняемый в среде браузера, но не являющийся HTML-элементом. Наиболее распространенная “дверь” - встроенная в браузер Java-машина. Java-аплет помещается на Web-страничку; при этом он стеснен только рамками Java-машины. С его помощью можно реализовать интерфейс практически любой сложности.

Браузер Internet Explorer дает возможность поместить на страницу элементы управления ActiveX - объекты, выполняемые прямо в ОС Windows, т. е. ничем не ограниченные. Дверь слишком широка, и множество вирусов пользуются ею. Поэтому Microsoft в своей новой платформе .Net предложила механизм Code Access Security, в том числе сужающий эту дверь для ActiveX-элементов, написанных на базе .Net и выполняющихся в браузере IE 6.0 с установленным .Net Framework.

Эти подходы свободны от ограничений HTML. Самое сильное преимущество проекта состоит в том, что он разработан на мощном языке традиционного клиент-серверного приложения, выполняемого в браузере. Но есть у него и слабости - требование поддержки браузером нужной “двери”, необходимость дополнительных работ по программированию взаимодействия клиента и Web-сервера.

Microsoft ASP.Net

Платформа ASP.Net являет собой попытку приблизить Web-архитектуру к традиционной модели “event-driven”. Среда скрывает разделенность клиента и сервера, предоставляя универсальную модель для обработки событий. События, возникающие на клиенте, можно обработать в коде, исполняемом на сервере! Технология получила название WebForms. Элемент управления в WebForms существует в двух ипостасях - как полноценный объект на сервере и как DHTML - представление элемента управления на клиенте. Архитектура серверной стороны практически соответствует модели “event-driven”.

Web-страница (форма) ASP.Net компилируется и представляет собой программу, генерирующую HTML. Эта программа запускается каждый раз, когда Web-страница запрашивается браузером. Для разработчика страница ASP.Net может быть физически разделена на два файла. Первый - собственно наполнение страницы, здесь размещаются специальные HTML-теги, маркирующие серверные элементы управления (о них - далее), и клиентские скрипты. Второй файл содержит серверный код, отвечающий за генерацию страницы и обработку событий. Можно кардинально уменьшить “спагеттевидность” кода, когда за строчкой клиентского наполнения страницы следует строчка, выполняющаяся на сервере. Важно, что серверный код можно писать на строго типизированном языке, например на С#. Все это упрощает отладку, повышает читабельность программы и, как следствие, уменьшает время разработки.

WebForms поддерживает несколько типов серверных элементов управления. Рассмотрим важнейшие из них. Самые простые - HTML-серверные, т. е. HTML-элементы, доступные и программируемые на сервере. Каждый такой элемент управления предоставляет программисту интерфейс, очень похожий на HTML-элемент, который он и генерирует. Главное отличие в том, что события HTML-серверного элемента могут быть обработаны как на клиенте (в обычном DHTML), так и на сервере.

Более изощренными являются Web-серверные элементы управления - главная “изюминка” ASP.Net. Web-серверный элемент не имеет однозначного HTML-представления. Этот объект генерирует некий DHTML, который реализует нужную функциональность. Для различных браузеров могут генерироваться различные DHTML. В комплект поставки Visual Studio .NET входят элементы управления для создания основных примитивов графического интерфейса. Если их не хватает, можно разработать собственные или расширить стандартные.

Web-серверные элементы могут быть привязаны к данным (data-binding). Такие элементы, как “список” или “таблица”, можно заполнить значениями из источника данных, каковым является результат запроса к БД или просто массив объектов. Еще одно новшество - шаблоны элементов, описывающие, как именно из элементов источника данных будет формироваться требуемый HTML. Немного абстрагируемся от “списка” и получим элемент управления “повторитель”, который берет шаблон и повторяет его для каждого элемента источника данных. Шаблоном может быть произвольный набор HTML-тегов или других элементов управления.

Web-серверные элементы поддерживают только серверные события. Серверное событие возникает на клиенте, но обрабатывается на сервере. В момент его возникновения (как события DHTML) информация о нем запоминается, HTML-форма пересылается на сервер, запускаются обработчики, форма переформируется и пересылается клиенту. Такой процесс именуется round-trip. Вся механика реализуется в среде ASP.Net. Технология адаптирована к подходу, когда большинство событий обрабатывается на сервере.

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

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

- автоматическая генерация корректного HTML-документа для старых (HTML 3.2) и новых (HTML 4.0) браузеров (должна быть реализована разработчиком элементов и уже имеется для элементов, входящих в поставку Visual Studio.Net).

Недостатки же их таковы:

- необходимость обращения на сервер для обработки событий;

- меньший контроль над получаемым DHTML.

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

Подходы к Web-переводу

Перенос нетривиального интерфейса на Web-платформу обязательно должен включать в себя фазу перепроектирования. Даже несложное приложение, основанное на полноценной графической системе, как правило, использует идеи, которые трудно или невозможно реализовать в Web. MDI-интерфейс (Multiple Document Interface) в принципе непереносим без перепроектирования. Важно помнить, что Web - это независимые страницы гипертекста и их трудно синхронизировать между собой. Хорошо реализуемый в Web интерфейс - упрощенный SDI (Single Document Interface), когда пользователь работает в одном окне. Открытие другого окна является созданием нового независимого контекста.

Можно выделить несколько подходов к переходу на платформу ASP.Net.

- Использование серверных элементов управления: интерфейс строится на Web- и HTML-серверных элементах. Последние разрешают также клиентские события. Плюсы: ясная архитектура, простота реализации. Минусы: частое обращение к серверу для запуска событий (round-trip).

- Использование DHTML: цель - уменьшение трафика ценой отказа от прелестей WebForms. Вместо round-trip используется клиентский скрипт для обработки событий и изменения HTML-наполнения страницы. Плюсы: минимальный трафик и малое время отклика. Минусы: нетипизированный код (трудная отладка), отсутствие в результирующей программе хорошо подготовленных к повторному использованию блоков.

- Комбинированный подход: цель - сделать оптимизированное приложение, не теряя преимуществ ASP.Net. Идея состоит в разработке Web-серверных элементов, которые разрешают клиентскую обработку событий. Такие элементы можно программировать и на сервере, и на клиенте, так как они будут генерировать известный HTML. Плюсы: оптимальный трафик и время отклика, ясная архитектура. Минусы: трудоемкость разработки элементов управления и архитектуры.

- Java-аплет или ActiveX: данный подход был освещен выше в первом разделе статьи. Главное отличие - использование полноценной базы для создания графического интерфейса пользователя. Плюсы: минимальный трафик и малое время отклика, ясность архитектуры, минимальное время реализации интерфейса. Минусы: дополнительные затраты на проектирование и реализацию взаимодействия с сервером; для аплета - смешение не связанных (конкурирующих) технологий, для ActiveX - требование IE в качестве браузера.

Если необходима поддержка нескольких браузеров, в том числе слабых в отношении реализации DHTML (как ранние Netscape), то лучшим вариантом будет Java-аплет или использование серверных элементов управления. Кроме того, последний - самый быстрый способ для реализации всего приложения. Комбинирование - наиболее трудоемкий подход, но ведущий к хорошей оптимизации.

Заключение

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

Web-технологии еще очень сыры. Тем не менее в ряду своих предшественников (CGI, PHP, ASP) ASP.Net - революционер. “Двухслойные” Web-серверные элементы управления вкупе с новым подходом к программированию Web-страниц разделяют серверный и клиентский код, уменьшая степень его “спагеттевидности” и позволяя создавать легко читаемые, понятные, а значит, готовые к дальнейшему развитию программы. Локализуется самая трудоемкая работа - написание клиентского DHTML, которая теперь превращается в написание нужного элемента управления. При этом значительно повышается степень повторного использования таких элементов.

Технология WebForms способствует ускорению процесса разработки и уменьшению затрат. Не нужно увлекаться копированием традиционного интерфейса один в один, грамотный подход - сделать упрощения в интерфейсе в соответствии с ограничениями Web-платформы. В этом случае вы не допустите сползания проекта в сторону DHTML-программирования. Перепроектировав интерфейс и располагая готовыми к использованию качественными ASP.Net Web-серверными элементами управления, можно значительно увеличить эффективность работы при переводе интерфейса с Windows-платформы на Web.

С автором, ведущим разработчиком компании “АстроСофт”, можно связаться по адресу: Alexey_K@astrosoft-yenisei.krs.ru.