На рис. 1 показана типовая архитектура построения многоуровневых приложений в
Delphi (на примере трехуровневого приложения).
В многоуровневых приложениях используется промежуточный уровень между сервером
базы данных и клиентским приложением. Бизнес-логика работы с базой данных
вынесена в отдельный уровень.
В идеале клиентское приложение не должно зависеть от типа базы данных и методов
физического хранения. Данная схема позволяет нескольким различным клиентским
приложениям использовать общие методы (функции) работы с базой данных.
При этом по мере увеличения функциональности приложения увеличивается количество
уже отработанных и отлаженных методов, которые можно повторно использовать.
Соответственно снижается стоимость новых разработок, уменьшаются сроки на выпуск
новых продуктов и снижается количество возможных ошибок.
Выделенный уровень называется сервером приложений, или удаленным брокером
запросов.
Компоненты TClientDataset могут связываться с сервером приложений посредством
различных компонент, наследующих TCustomRemoteServer, в зависимости от
выбранного протокола связи (TCP/IP, HTTP, DCOM, SOAP или CORBA). При соединении
с сервером приложений клиенту возвращается описывающий доступные методы
интерфейс. Посредством этого же соединения осуществляется связь компонент
TClientDataset с провайдерами (TProvider), которые связываются с конкретными
компонентами TDataset.
Рассмотрим предложенную Даном Мишером (Dan Miser) в статье "ClientDataset as a
Replacement for Cached Updates" архитектуру приложения, показанную на рис. 2.
В данном случае сервер приложения временно помещается в клиентское
приложение. На практике желательно создать два модуля данных: один для компонент
сервера приложений и второй для клиентского приложения. При этом клиентское
приложение пишется так, как будто о модуле данных сервера приложений ничего не
известно.
Связь с данным модулем осуществляется только из клиентского модуля данных,
который дублирует и перенаправляет вызовы методов сервера приложений.
Данная технология позволяет получить начальный опыт при построении
многоуровневых приложений, а также упрощает отладку. К тому же, для таких
приложений не требуются дополнительные MIDAS-лицензии, и мы получаем все
преимущества использования компонент TClientDataset без дополнительных затрат.
Автор: Сергей Бердачук
|