Продолжается подписка на наши издания! Вы не забыли подписаться?

Конечные автоматы, визарды и Web

Автор: Michele Leroux Bustamante
Опубликовано: 27.02.2006

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

Разработчикам, чья задача состоит в разработке интуитивно понятного интерфейса приложения, Microsoft ASP.NET 2.0 сулит увеличение производительности благодаря набору новых или улучшенных ASP.NET-элементов управления, включающему новый элемент управления Wizard. Меня крайне заинтересовал этот control, поскольку я разрабатывала собственный XML-движок визардов под ASP.NET 1.1, пытаясь упростить разработку прототипов и навигацию. В этой статье я расскажу о конечном автомате, управляющим моим движком визардов, покажу, как работает новый control Wizard в ASP.NET 2.0 и сравню их между собой.

Это визард, как его не называй

В мире MS Windows интерфейс визарда – это чаще всего диалог с кнопками Previous, Next, Finish и Cancel, позволяющими пользователю перемещаться вперед и назад по приложению, чтобы в конце концов выполнить требуемую задачу. На каждом шаге визарда разъясняется роль этого шага в выполнении общей задачи. Хороший визард также включает карту, в которой выделен текущий шаг. В Windows-интерфейсах этот тип навигации тесно связан с пользовательским интерфейсом, что позволяет легко привязать пользователя к выполнению шагов в определенном порядке.

Разработка визарда для Web содержит довольно много сложностей. Беда Web-визардов – это наличие доступа к адресной строке и кнопкам навигации браузера, так как это дает пользователю дополнительные средства навигации. Из-за того, что пользователь может ввести новый адрес, лежащий вне границ визарда, или использовать навигацию браузера для перемещения вперед и назад по шагам визарда и изменения данных, любое обращение к серверу оказывается под подозрением. Хороший визард решает эту проблему, сообщая пользователю, когда он пошел неверным путем, и мягко подталкивая его на путь истинный (в понимании визарда), или же отменяя выполнение текущего визарда перед началом новой задачи. Web-визарды должны также управлять состоянием визарда и собранными данными. Нужно указать, какая информация собирается на каждом шаге, определить, на каких этапах выполнения визарда эта информация будет проверяться, обрабатываться и сохраняться, и проверять, что все данные собраны в верном порядке.

Преодоление этих проблем Web-разработки требует кода на стороне сервера для управления приложением и состоянием визарда, а также отслеживания отклонений в наывигации для обеспечения соответствия. Это значит, что каждая отправка данных на сервер должна не только управлять хранилищем любых введенных данных, но и определять применимость запрошенного ресурса в текущий момент процесса выполнения визарда. Несмотря на то, что каждая страница может получить отклик (postback) и управлять собственными данными, жесткое кодирование переходов между страницами ведет к кошмару при поддержке, так как правила навигации могут изменяться, а страницы - использоваться многократно в различных процессах. Более того, чтобы обеспечить данной странице отклик, соответствующий текущей ситуации, нужна дополнительная логика, которая лучше управляется с помощью централизованного кода.

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

Рассмотрим конечный автомат

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

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

На рисунке 1 показан простой пример диаграммы коечного автомата для светофора.


Рисунок 1. События таймера запускают переход к другому цвету.

В диаграмме конечного автомата круги означают состояния, а стрелки – переходы. Подпись к каждому переходу соответствует, причине, вызывающей переход. По достижении нового состояния переход, приведший автомат в это состояние, более не имеет значения. В примере светофора имеется три состояния, соответствующих цветам светофора – Зеленому (З), Желтому (Ж) и Красному (К). Начальным состоянием этого конечного автомата является "З", из каждого состояния есть только один возможный переход, ведущий в следующее состояние. Это называется детерминированным конечным автоматом. Недетерминированные конечные автоматы допускают наличие нескольких переходов из одного состояния, на выбор которых влияют подаваемые на вход автомата данные, как показано на рисунке 2.


Рисунок 2. У недетерминированного конечного автомата есть несколько корректных переходов из каждого состояния.

...

Заключение

Если вы прониклись конечными автоматами и XML-конфигурируемыми движками, вы можете найти применение FSM Wizard Engine в ожидании выхода ASP.NET 2.0 Wizard. Я нахожу его крайне полезным при создании прототипов интенсивно использующих визарды сайтов, требующих частых изменений, в которых принимают участие Web-дизайнеры и маркетологи.

........................
"С полным содержанием данной статьи можно ознакомиться в печатной версии журнала"

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

Copyright © 1994-2016 ООО "К-Пресс"