На рис. 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 без дополнительных
затрат.