Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре
Шрифт:
Интервал:
Закладка:
Как и в случае других аспектов проектирования, при реализации асинхронной обработки вам могут очень пригодиться конечные автоматы. Конечные автоматы значительно расширяют возможности управления выполнением фоновых задач. Их использование делает возможным предоставление фоновыми потоками информации о состоянии выполнения, а также обращение других потоков с запросами к фоновому потоку на выполнение определенных действий, например, с запросом на прекращение выполнения фоновой работы. Плодотворным методом абстрагирования является инкапсуляция фоновой задачи в отдельном классе, что позволяет рассматривать ее как от дельную логическую единицу, для которой определены входные и выходные данные.
Почти во всех случаях для управления пользовательским интерфейсом целесообразно предусматривать только один поток; этот поток должен быть основным потоком вашего приложения. Поток пользовательского интерфейса может осуществлять периодический опрос фоновых задач с целью получения информации о состоянии их выполнения и передавать эту информацию пользователю. В другом возможном варианте фоновые потоки могут передавать эту информацию пользовательскому интерфейсу посредством межпоточного взаимодействия, например, с помощью механизма Control.Invoke(), предоставляемого .NET Compact Framework.
Потоки являются весьма полезным, но сложным инструментом. Как и в случае любой другой новаторской методики, существует риск чрезмерного использования многопоточного выполнения. Неоправданное применение нескольких потоков снижает общую производительность приложения, а излишняя сложность многопоточных моделей затрудняет сопровождение и отладку кода. Используйте многопоточность лишь в тех случаях, когда в этом действительно существует необходимость, привлекая для этого как можно более простые подходы. Следуя этим простым советам, вы сможете воспользоваться всеми преимуществами многопоточности и при этом избежите множества ловушек, связанных с использованием нескольких потоков выполнения кода.
ГЛАВА 10
Производительность и XML
Введение: работа с XML
XML быстро становится излюбленным текстовым форматом, применяемым для хранения и передачи данных. Причины его повышенной по сравнению с обычными текстовыми файлами популярности имеют два аспекта: 1) иерархичность — данные могут легко сохраняться с использованием отношений "родительский-дочерний" между ними, и 2) полуструктурированность — XML допускает значительную гибкость в управлении структурной информацией, применяемой к данным, обмен которыми осуществляется. XML-данные могут либо жестко привязываться к определенной схеме (сама схема также может задаваться в виде XML-документа), либо передаваться как таковые в свободной форме без каких-либо формальных указаний относительно содержимого документа.
XML имеет много сходства с другим популярным форматом кодирования информации — HTML. HTML — это аббревиатура от HyperText Markup Language — язык гипертекстовой разметки, что, говоря простыми словами, означает использование "текстовых дескрипторов, описывающих то, как выглядит документ". Аналогичным образом, XML — это extensible Markup Language — расширяемый язык разметки документов, что в переводе на обычный язык означает использование "текстовых дескрипторов, описывающих данные". Язык XML является продуктом накопления опыта в процессе эволюции HTML, и оба эти языка происходят от более старого абстрактного формата SGML (Standard Generalized Markup Language — стандартный обобщенный язык разметки). Полуструктурированный иерархический текстовый формат HTML на практике доказал свою большую гибкость по сравнению со многими существующими до этого двоичными форматами. Популярные адаптированные варианты HTML, а затем и XML продемонстрировали, что компактностью двоичных форматов часто имеет смысл пожертвовать ради гибкости, расширяемости и переносимости текстовых форматов. Синтаксис дескрипторов и атрибутов, используемый в HTML для описания внешнего вида и содержимого документов, рассматривался многими разработчиками как мощная, расширяемая модель описания данных. Недостатки HTML обусловлены его быстрой эволюцией; поскольку в течение ряда лет этот формат претерпел естественные эволюционные изменения, в его синтаксисе имеются несоответствия, которые при последовательном подходе к разработке языка считались бы недопустимыми.
В силу эволюционной сложности этого формата браузеры обычно терпимо относятся к документам, "сформированным с отклонениями от строгих правил", то есть они не отказываются от обработки такого документа, а делают все возможное для того, чтобы в любом случае представить документ пользователю. В результате этого синтаксический анализ HTML-документов излишне затруднен. XML заимствует принятый в HTML подход, в котором используется текстовый формат, а также синтаксис дескрипторов и атрибутов, но при этом поддерживает нормализованный синтаксис, пригодный для использования совместно с универсальными механизмами синтаксического разбора. Кроме того, XML-анализаторы обычно требуют, чтобы документы были корректно сформированными и завершенными; строгое следование синтаксическим правилам формирования XML-документов существенно улучшает возможности использования их на различных платформах. Благодаря этому широко доступные XML- анализаторы находят самое разнообразное применение.
Как и HTML, язык XML имел успех постольку, поскольку была достигнута договоренность о его использовании для обмена информацией между различными системами. Важность широкого принятия этой методики невозможно переоценить. После того как формат получает всеобщее одобрение, вступают в силу сетевые эффекты, и популярная технология очень быстро становится доминирующей. На протяжении последних лет сфера применения XML постоянно расширяется, и теперь он используется в качестве базового формата для многих высокоуровневых коммуникационных форматов, включая SOAP (Simple Object Access Protocol — простой протокол доступа к объектам; лежит в основе Web служб), WSDL (Web Service Description Language — язык описания Web служб), XSL (eXtensible Schema Language — расширяемый язык описания схем), RSS (Really Simple Syndication — подлинно простое объединение данных; механизм распространения данных) и многие другие форматы. Некоторые XML-форматы носят универсальный характер, тогда как другие являются специфическими для определенной отрасли или технологии, принятой в компании. В настоящее время при проектировании новых форматов хранения и обмена данными вопрос часто заключается не в том, следует ли использовать XML, а в том, какой уровень абстракции поверх XML следует использовать. Вероятнее всего, установленные на вашем мобильном устройстве приложения, взаимодействующие с сетью, используют для нужд связи, хранения и обмена данными именно XML. Вы можете использовать данные в XML- форматах других систем, но вам также может потребоваться разработка собственных XML-форматов, которые должны будут использовать другие люди. Существуют различные подходы к организации работы с XML-документами, соответствующие различным уровням абстракции. Каждый из них характеризуется своими достоинствами и недостатками. По этим причинам очень важно твердо знать, как работать с XML, чтобы это наилучшим образом отвечало вашим запросам.
Как бы полезен ни был XML, важно понимать, что он не является панацеей, позволяющей удовлетворить все нужды обмена данными. XML предлагает гибкость, но это достигается за счет высокой степени детализации описания данных. Всегда следует рассматривать возможность использования как XML, так и двоичных форматов для обмена данными, и выбор между ними должен основываться на объеме данных, подлежащих обмену, и природе коммуникационных сетей, которые использует ваше мобильное приложение. Если удается использовать XML, то он обеспечит вам значительную гибкость, и его следует рассматривать в качестве предпочтительного варианта. Однако XML не годится для обмена большими объемами данных по линиям связи с небольшой пропускной способностью. Об этом очень важно не забывать при проектировании коммуникационной модели приложения.
В случае же если проблемы больших объемов и длительности передачи данных могут быть успешно решены, XML обеспечивает замечательные возможности для обмена данными между мобильными устройствами, между мобильным устройством и настольным компьютером или между мобильными устройствами и серверами. Выбор XML в качестве способа хранения и передачи данных является лишь первым в ряду решений. Не меньшее значение имеет выбор внутренних механизмов того, как ваше приложение будет осуществлять чтение и запись XML-данных. Как и в отношении многих других технических аспектов программирования, универсального рецепта здесь не существует, и приходится идти на различные компромиссы, учитывающие интересы разработчиков, удобство сопровождения кода и необходимость создания комфортных условий работы с программой для пользователя. В данной главе дается общий обзор такого рода базовых проектных решений.