Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №6
Шрифт:

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

• Трехзвенная архитектура клиент/бизнес-логика/данные

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

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

• Web сервисы

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

Технология COM (Component Object Model — компонентная объектная модель) от Microsoft

Перепишем приложение о книгах и журналах, используя идеологию модели СОМ — Component Object Model от Microsoft. Изложение основ этой модели будет проведено на примерах.

Интерфейсы

Напомним, что в модели СОМ все основано на интерфейсах. Интерфейс — это контракт между реализующим данный интерфейс компонентом и клиентом, представленный набором определений методов (ничего кроме определений методов в интерфейс включать нельзя). Один и тот же интерфейс могут реализовать различные компоненты, написанные на разных языках, но любой компонент, реализующий данный интерфейс, гарантирует полную реализацию его семантики, т. е. определенный набор методов.

Часто базовую архитектуру СОМ определяют с помощью следующей формулы

Базовая архитектура СОМ = сервер/класс/интерфейс/метод

Компонент реализуется в виде сервера (одного из трех видов). Сервер является хранилищем для одного или нескольких классов. Каждый класс реализует один или несколько интерфейсов.

Каждый интерфейс определяет один или несколько методов и обязательно наследует от стандартного интерфейса IUnknown (прямо или косвенно).

Определим вначале абстрактный базовый интерфейс IPub (публикация), от которого далее будут порождены интерфейсы IBook и IJournal (книга и журнал). Здесь надо отметить, что в СОМ нет множественного наследования интерфейсов и каждый пользовательский интерфейс должен порождаться от какого-либо другого интерфейса (хотя бы от IUnknown). Определение этого интерфейса IPub в виде заголовочного файла для C++ (IPub.h) приводится ниже.

// IPub.h — Базовый интерфейс публикации IPub

#ifndef _IPub_

#define _IPub_

#include <windows.h> //

содержит все нужное для COM

DECLARE_INT E RFAC E_(IPub, IUnknown)

{

STDMETHOD(SetTitle)(BSTR bstrTitle) PURE;

STDMETHOD(SetYear)(int nYear) PURE;

STDMETHOD(Getlnfo)(BSTR * pbstrlnfo) PURE;

};

#endif

В данном примере определен интерфейс IPub, наследуемый от стандартного интерфейса IUnknown. В интерфейсе IPub определены 3 метода:

SetTitle — задание названия публикации,

SetYear — задание года публикации

Getinfo — получение информации о публикации.

При описании как самого интерфейса, так и входящих в него методов использованы следующие макросы:

#define DECLARE_INTERFACE_(ifасе, baseiface)

interface iface: public baseiface

#define STDMETHOD(method) virtual HRESULT stdcall method

#define PURE = 0

Таким образом,

DECLARE_INTERFACE_(IPub, IUnknown)

означает, что IPub есть интерфейс (то же что и struct в С), порожденный от IUnknown, а

STDMETHOD(SetTitle)(BSTR bstrTitle) PURE

означает, что чисто виртуальный метод SetTitle возвращает стандартную для СОМ величину типа HRESULT — 32-битное значение, позволяющее определить успешно или нет прошел вызов метода, и, в случае неуспеха, где произошла и какая ошибка. Очевидно, что возможность анализа ошибок очень важна в распределенных приложениях. При этом _stdcall означает, что параметры метода заносятся в стек в порядке справа налево и перед возвратом функция удаляет из стека свои параметры.

При определении интерфейсов всегда используются чисто виртуальные функции. Это означает, что не существует реализации интерфейса. Это только контракт, никак не ограничивающий конкретную реализацию. Для использования данного интерфейса нужно определить класс, наследующий этот интерфейс (и, возможно, другие интерфейсы), и уже реализовать этот класс.

Известно, что в разных языках программирования строки организованы различным образом. В СОМ выбрано представление строки, позволяющее работать с ним в программах, написанных на различных языках. Переменная типа BSTR (BASIC String) есть строка, представленная в формате Unicode (2 байта на один символ), с завершающим нулем и с префиксом (4 байта), хранящим длину строки (что позволяет сохранять внутри строки нулевые символы). Имеется ряд функций, облегчающих работу с такими строками (которые для C++ будут продемонстрированы в последующих примерах).

И, наконец, напомним, что в реализации данного примера средствами ООП в описании класса CPublication имелся метод Display, который обеспечивал вывод информации о публикации на терминал.

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

Поделиться:
Популярные книги

Ересь Хоруса. Омнибус. Том 3

Коннелли Майкл
Ересь Хоруса
Фантастика:
фэнтези
5.00
рейтинг книги
Ересь Хоруса. Омнибус. Том 3

Город Богов

Парсиев Дмитрий
1. Профсоюз водителей грузовых драконов
Фантастика:
юмористическая фантастика
детективная фантастика
попаданцы
5.00
рейтинг книги
Город Богов

Пятничная я. Умереть, чтобы жить

Это Хорошо
Фантастика:
детективная фантастика
6.25
рейтинг книги
Пятничная я. Умереть, чтобы жить

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Прорвемся, опера! Книга 2

Киров Никита
2. Опер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прорвемся, опера! Книга 2

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Надуй щеки! Том 2

Вишневский Сергей Викторович
2. Чеболь за партой
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Надуй щеки! Том 2

На границе империй. Том 7. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
На границе империй. Том 7. Часть 4

Альда. Дилогия

Ищенко Геннадий Владимирович
Альда
Фантастика:
фэнтези
7.75
рейтинг книги
Альда. Дилогия

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Дурная жена неверного дракона

Ганова Алиса
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дурная жена неверного дракона

Крещение огнем

Сапковский Анджей
5. Ведьмак
Фантастика:
фэнтези
9.40
рейтинг книги
Крещение огнем