Клиент многозвенного распределенного приложения
Клиент многозвенного распределенного приложения
Клиентское ПО в распределенном многозвенном приложении имеет особенности архитектуры, продиктованные его ролью – ведь большая часть бизнес-логики и функций обработки данных сосредоточены в сервере приложений (см. гл. 21).Структура клиентского приложения
По своей структуре (рис. 22.1) клиентское приложение подобно обычному приложению баз данных, рассматриваемому в гл. 11. | Рис. 22.1. Структура клиентской части многозвенного приложения Delphi | Соединение клиента с сервером приложений осуществляется специализированными компонентами DataSnap (см. гл.Клиентские наборы данных
В Палитре компонентов Delphi представлено несколько компонентов, инкапсулирующих клиентский набор данных. В то же время при разработке настоящих удаленных клиентских приложений применяется компонент TClientDataSet. Внесем ясность в этот вопрос.Компонент TClientDataSet. Получение данных от компонента – провайдера.
Компонент TclientDataSet используется в клиентской части многозвенного распределенного приложения. Он инкапсулирует набор данных, переданный при помощи компонента-провайдера из удаленного набора данных. Компонент обеспечивает выполнение следующих основных функций:Кэширование и редактирование данных
После получения записей от провайдера набор данных сохраняется в локальном буфере памяти. И все вносимые изменения после применения метода Post также сохраняются локально и не пересылаются на сервер. Буфер изменений доступен при помощи свойства: | property Delta: OleVariant;Управление запросом на сервере
Компонент TdientDataSet может не только эффективно управлять своим набором данных, но и влиять на выполнение серверного компонента, с которым он связан через провайдер. | Свойство: | property CornmandText: string;Использование индексов
Обычно использование индексов – прерогатива сервера БД. Из компонентов Delphi только табличные компоненты могут в какой-то степени управлять использованием индексов. Очевидно, что удаленное соединение не способствует эффективному управлению индексами набора данных на сервере.Сохранение набора данных в файлах
Клиентское приложение может использовать одну очень удобную функцию компонента TClientDataSet. Представим, что соединение между сервером и клиентом обладает малой пропускной способностью и к тому же часто обрывается.Работа с данными типа BLOB. Представление данных в формате XML.
Если набор данных сервера содержит большие поля (например, изображения), передача данных по медленному каналу займет очень много времени, что, несомненно, снизит эффективность приложения. Простейшее решение проблемы – передача клиенту данных типа BLOB только в том случае, когда это ему действительно необходимо – т. е. исключительно по его запросу.Агрегаты. Объекты-агрегаты.
Наличие локального буфера данных позволяет компоненту TClientDataSet реализовать ряд дополнительных функций, основанных на использовании агрегатных функций применительно к полям всего набора данных, загруженного в локальный буфер. | К агрегатным функциям относятся: | AVG – вычисляет среднее значение;Агрегатные поля. Группировка и использование индексов.
Агрегатные поля не входят в структуру полей набора данных, т. к. агрегатные функции подразумевают объединение записей таблицы для получения результата. Следовательно, значение агрегатного поля нельзя связать с какой-то одной записью, оно относится ко всем или группе записей.Вложенные наборы данных. Дополнительные свойства полей клиентского набора данных.
В гл. 14 рассматривался вопрос организации между таблицами отношения "один-ко-многим", когда через одинаковое значение поля внешнего ключа одна запись главной таблицы связывается с несколькими записями подчиненной таблицы.Обработка ошибок
Особенности использования компонента TClientDataSet распространяются также и на обработку ошибок. Ведь клиентский набор данных должен реагировать не только на ошибки, возникшие локально, но и на ошибки сохранения изменений на сервере. | В первом случае разработчик может применить стандартные способы.Пример "тонкого" клиента
Пример клиентского приложения является частью группы проектов SimpleRemote.bpg и предназначен для взаимодействия с сервером приложений simpleAppSrvr (рис. 22.5), процесс создания которого подробно рассматривался в гл. 21. | Рис. 22.5.