Каждый раз при использовании Windows Internet API в собственном приложении кажется, будто пишешь одни и те же строки кода снова и снова. Каждый раз написание новой WinInet-функции выглядит, словно ты повторяешь уже написанное с незначительными изменениями. Вероятно, это происходит из-за общих принципов разработки Интернет-приложений. Обычно, все транзакции, которые использует данный протокол Интернет, используют одну и ту же логику высокого уровня. Разумеется, при этом необходимо определенную часть транзакций Интернет подстраивать под конкретную задачу.
Например, представим, что нам нужно создать приложение, использующее HTTP для соединения с различными серверами в Интернет посредством TCP/IP. Естественным подходом будет написание Win32-функций на базе WinInet, которые обрабатывали бы передачу данных. Наиболее дальновидные разработчики будут искать подход, обеспечивающий повторное использование определенных функций. Разработчики, работающие с объектно-ориентированными системами смогут для инкапсуляции нужной функциональности даже разработать свои С++-классы. Независимо от реализации передачи, каждой задаче для обработки различных форматов HTTP необходимы различные методы HTTP, заголовки, входные форматы данных, имена хостов, номера портов и программа синтаксического разбора. Для того, чтобы увеличить число слоев или сложность, одним запросам необходимо шифрованное соединение между узлами (Secure Sockets Layer - SSL), в то время, как другие запросы могут передавать текст в чистом виде.
Какие пути можно найти для решения этих вопросов проектирования, если используются стандартные функции Win32 или классы С++? Нет ли лучшего подхода, который обеспечил бы возможности повторного использования и расширяемости кода WinInet? Если вы еще не догадались, то можно и подсказать - это архитектура СОМ. Если вы бизнесмен и продаете универсальные продукты, настраиваемые приложения или компоненты программного обеспечения, то вы сделаете всех вокруг себя (включая себя самого) несколько счастливее, найдя способ создания повторно используемого кода.
Большинство разработчиков стараются применить это на практике. СОМ-подход в разработке кода WinInet, предложенный здесь, поможет на один шаг приблизиться к использованию СОМ в повседневной работе. Понятно, что СОМ - это отличное решение для создания повторно используемых и расширяемых компонентов WinInet. Разбиение функциональности, описанной в сценарии HTTP, на множество СОМ-объектов, поможет повторно использовать наиболее характерные компоненты и переписывать только компоненты для определенных задач. Такой подход позволяет вам по-новому применять уже опробированные компоненты и минимизировать написание кода для задач, связанных с WinInet. Более того, СОМ-подход предусматривает динамичную расширяемость приложений простым добавлением новых компонентов к системе пользователя во время работы.
В этой статье показано, как писать повторно используемые СОМ-компоненты HTTP WinInet. Прежде всего, дано вводное обозрение WinInet и показано, как можно начать использовать WinInet в собственных приложениях. После этого мы обсудим типичную модель приложения клиент/сервер и углубимся в детали HTTP. Имея эту базу, рассмотрим, как реализовывать два COM-компонента на базе ATL - IHttpRequest и IQuoteProvider. И, наконец, покажем, как все это связать в приложении, пример которого называется Stock Watcher (Отслеживание Курса Акций). Stock Watcher получает биржевые котировки сот различных провайдеров биржевых котировок Интернет и предоставляет их пользователю. Даже если вы больше ничего не узнаете из этой статьи, то, как минимум, сможете получить полезное приложение для своего бизнеса...
(полный вариант статьи можно найти в
ТКС 3'98
или на СD-ROM "Сборник журналов издательства "Аудит-Оптим")
С вопросами и предложениями обращайтесь digraph@rinet.ru