Н. 3. Елманова. C++Builder 3.0, архитектура "клиент/сервер" и Internet_______
навигационными методами, так и методами, осуществляющими редактирование данных. Кроме того, этот компонент обладает методами SaveToFile() и LoadFromFileQ, позволяющими сохранять данное из кэша в файле и восстанавливать их оттуда, реализуя так называемую "briefcase model" - модель обработки данных, основанную на том, что "тонкий" клиент осуществляет редактирование данных по большей части при отсутствии соединения с сервером используя лишь кэш или локальные внешние устройства, и лишь иногда соединяется с сервером приложений для передачи ему измененных данных с целью дальнейшей обработки.
Как только клиент получает набор данных от сервера приложений, этот набор может быть использован компонентом TClientDataset, который наряду с компонентами TRemoteServer или TMidasConnection, а также поддерживающей их функционирование библиотекой dbchent.dll составляет клиентскую часть Remote DataBroker.
Отметим, что Remote DataBroker предоставляет разработчикам широкие возможности для решения характерных для многопользовательского доступа к данным проблем, связанных с попытками одновременного редактирования несколькими пользователями одних и тех же данных. В данном случае механизм блокировок, применяемый в традиционной двухзвенной модели "клиент/сервер", может оказаться неэффективным или даже неприемлемым, так как промежуток времени между редактированием записи и сохранением ее в базе данных может быть весьма длительном. Поэтому при попытке сохранения сервером приложений измененной записи в базе данных производится поиск изменяемой записи либо по ключевому полю, либо по всем полям в зависимости от значения свойства UpdateMode ответственного за этот процесс компонента TDBDataSet на сервер е приложений и сравнение всех полей изменяемой записи с исходными значениями (т. е. теми, которые были в кэше клиента на момент получений этой записи с сервера до того, как пользователь изменил в кэше эту запись). Если какие-либо поля за время между получением оригинала записи клиентом и попыткой сохранить изменения были модифицированы другим пользователем, запись может быть передана обратно в клиентское приложение для дальнейшей обработки пользователем.
Отметим также, что удаленные модули дан:ных (объекты Remote Data Module), входящие'в состав серверной части Re.mote DataBroker и содержащие компоненты TDBDataSet, позволяют пред-оставить DCOM-интерфейс для соответствующих объектов, делая их управляемыми извне и превращая, таким образом, сервер приложений в D.COM-сегрвер. Осуществляется такая публикация объектов путем выбора опции эксперта из удаленного модуля данных из контекстного меню соответствующегоо компонента при разработке сервера приложений.
Создание многозвенных информационных систем с помощью C++Builder 3.0
JBusinsss-^ObjectBroker осуществляет для "тонкого" клиента поиск нужного сервера приложений среди доступных извне серверов, опубликованных в глобальном реестре - global registry, представляющем собой открытые части реестров компьютеров, содержащих серверы приложений. Применяется он в случае, когда требуется дублирование серверов приложений и возможность при сбое работы используемого сервера приложений подключить клТКтскоё^приложение к другому серверу, либо при необходимости равномерного распределения клиентов по серверам приложений.
Еще одной важной составляющей частью MIDAS является ^ConstraintBroker, дающий возможность использовать бизнес-правила сервера баз данных "тонким" клиентом. Обычно при проектировании баз данных бизнес-правила и правила ссылочной целостности реализуются в виде объектов базы данных, таких, как индексы, триггеры, хранимые процедуры. Такой подход к проектированию данных позволяет использовать эти объекты различными клиентскими приложениями без написания дополнительного кода.
В случае классической двухзвенной клиент-серверной информационной системы при изменении данных клиентское приложение пытается отправить измененную запись на сервер, а сервер, в свою очередь, пытается сохранить ее в базе данных, начав соответствующую транзакцию. Если запись не удовлетворяет условиям ссылочной целостности, определенным на сервере, пр.ои.зводихс.,я откат транзакции и сервер возвращает клиентскому приложению сообщение об ошибке, после чего пользователь должен будет скорректировать предназначенные для сохранения данные. Если подобные случаи происходят часто, это приводит к перегрузке сети и увеличению времени отклика сервера.
Чтобы уменьшить количество отправляемых на сервер некорректных записей, иногда часть бизнес-правил воспроизводят в клиентском приложении. В этом случае частичный контроль соответствия записи бизнес-правилам производится без обращения к серверу, но возможность отправки некорректной записи все же сохраняется, так как обычно код, содержащийся в хранимых процедурах и триггерах, в клиентских приложениях не воспроизводится. Кроме того, при изменении бизнес-правил такое приложение требует внесения в него изменений, что влечет за собой трудозатраты, связанные с установкой и конфигурацией новой версии на рабочих станциях.
При использовании ConstraintBroker эта проблема решается по-другому. В этом случае RemoteDataBroker не только "доставляет данные клиентскому приложению, но и обращается к словарю..данных сегавера^лщщюжений с целью получения ограничений сервера и передачи их клиенту. Соответственно при попытке передачи записи на сервер приложений анализ соответствия записи правилам сервера производится непосредственно в клиент-
166
167