BigEdu.ru
» » » Модель briefcase средствами MIDAS
Вернуться назад

Модель briefcase средствами MIDAS

В прошлом номере журнала я писал о реализации модели Briefcase с помощью ADO. В отличие от ADO, средства работы с отключенными наборами данных в MIDAS были реализованы с самой первой версии. Реализация модели Briefcase средствами MIDAS несколько проще, хотя и здесь есть свои подводные камни.
Приложение MIDAS состоит из двух частей: сервера приложений и тонкого клиента. Сервер приложений «общается» с сервером БД (или другим источником данных), реализует бизнес-правила и предоставляет тонкому клиенту данные по запросу. Функция тонкого клиента – это отображение данных пользователю.
В качестве примера мы спроектируем простой сервер приложений и тонкий клиент для работы с базой, описанной в предыдущей части статьи. Сервер приложений реализуем как модуль MTS/COM+. Никаких особенностей создания сервера приложений для модели briefcase нет, поэтому я не буду описывать этот процесс в деталях. В IDE Delphi создадим новый проект приложения для MTS/COM+, выбрав пункт меню File/New/Other, и в появившемся диалоге выберем пункт ActiveX Library с закладки ActiveX. Затем включим в проект новый удаленный модуль данных (File/New/Other и пункт Transactional Datamodule с закладки Multitier).
В удаленном модуле данных разместим следующие компоненты и установим значения их свойств согласно таблице 1, приведенной ниже.
Компонент Свойство Значение
Conn:TADOConnection ConnectionString Настроить на соединение с БД
adsParams:TADODataSet Connection Conn
CommandText CommandText select * from Params
dspParams:TDataSetProvider DataSet adsParams
Таблица 1
Откомпилируйте проект сервера и установите полученную dll в новое MTS/COM+-приложение c именем MIDAS_briefcase, с помощью пункта меню Run/Install COM+ Object.
Тонкий клиент представляет собой DeskTop-приложение. Для связи с сервером приложений клиент использует один из компонентов типа Connection с закладки DataSnap (мы воспользуемся DCOMConnection) и специальный DataSet – ClientDataSet.
В таблице 2 приведены свойства, влияющие на работу компонентов тонкого клиента с сервером приложений, а также их значения.
Компонент Свойство Значение
DCOMConn:TDCOMConnection ServerName Project1.MIDAS_bc
LoginPrompt false
cdsParams:TClientDataSet RemoteServer DcomConn
ProviderName dspParams
Таблица 2
Внешний вид формы приложения тонкого клиента приведен на рисунке 1.
Рисунок 1
Получение данных с центрального сервера
Получение данных с сервера приложений аналогично приведенному в примере для ADO. Код приведен ниже.
procedure TForm1.act_RemoteConnectExecute(Sender: TObject);
begin
try
with cdsParams do try
Close;
RemoteServer:=DCOMConn;
FileName:='';
Active:=true;
except on E:Exception do
MessageDlg(Format('Ошибкаподключенияксерверу: %s', [E.Message]),
mtError, [mbOk], 0);
end;
finally
DCOMConn.Close;
end;
Все просто, но для подключения к серверу надо не забывать сбрасывать имя файла кэша (свойство FileName) и закрывать соединение с сервером после получения данных.
Чтение и запись данных из локального кэша
Для чтения данных из локального кэша у ClientDataSet есть метод LoadFromFile:
procedure TForm1.act_ConnectLocalExecute(Sender: TObject);
begin
with cdsParams do
begin
RemoteServer:=nil;
FileName:=ExtractFilePath(Application.ExeName) + LocalFile;
LoadFromFile(FileName);
end;
end;
Для записи в локальный кэш – метод SaveToFile:
with cdsParams do
SaveToFile(ExtractFilePath(Application.ExeName) + LocalFile);
Опять же никаких сюрпризов.
Сохранение данных на сервер, отмена сделанных изменений
Для сохранения данных на сервер предназначен метод CilentDataSet-а ApplyUpdates. Параметр данного метода указывает макисимально допустимое количество ошибок при передаче данных на сервер.
procedure TForm1.act_SaveToServerExecute(Sender: TObject);
begin
if cdsParams.Active and (cdsParams.ApplyUpdates(0) = 0) then
act_RemoteConnect.Execute;
end;
При возникновении ошибки генерируется событие OnReconcileError. Обработка ошибки осуществляется с помощью стандартного модуля обработчика ошибки, подключить этот модуль в проект можно, выбрав ReconcileErrorDialog на закладке Dialogs (File/New/Other). Обработчик OnReconcileError будет выглядеть при этом следующим образом:
procedure TForm1.cdsParamsReconcileError(DataSet: TCustomClientDataSet;
E: EReconcileError; UpdateKind: TUpdateKind;
var Action: TReconcileAction);
begin
Action:=HandleReconcileError(DataSet, UpdateKind, E);
end;
Для отмены внесенных изменений ClientDataSet содержит метод CancelUpdates.
Чтение данных «порциями»
Обмен данных между тонким клиентом и сервером приложений происходит пакетами. Пакет содержит информацию о метаданных и/или набор записей. Интересной возможностью MIDAS является передача данных «порциями». Естественно, данная возможность реализуется лишь во время наличия соединения с центральным сервером. Включение данной возможности осуществляется установкой свойства FetchOnDemand ClientDataset-а в true. К сожалению, даже при этом запрос к серверу базы данных выбирает все записи сразу. Об одном из способов устранения этого недочета я и хочу рассказать.
Первое, что необходимо сделать, это изменить текст SQL-запроса, находящегося в свойстве CommandText компонента adsParams (напомню, что это ADODataSet), на следующий:
select Top 2 * from Params where ParamID > :ID
При этом записи будут выбираться порциями по 2. Естественно, что в реальных приложениях размер пакета будет больше этого числа. Конкретное число представляет собой компромисс между затратами времени на передачу пакета по сети (чем больше размер пакета, тем выше задержки при его передаче) и задержками, возникающими от частого обращения с запросами к серверу БД. (на практике размер такого пакета зависит от размера записи, но в среднем составляет от 30 до 250 строк. – прим.ред.)
Остается решить проблему, как клиент будет передавать серверу идентификатор последней считанной записи (ParamID). Проблема эта возникает потому, что сервер приложений не сохраняет состояние между вызовами клиентов. С одной стороны, это делает сервер приложений более масштабируемым, но с другой, требует дополнительного кода на стороне клиента для хранения состояния.

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать полную версию
Рефераты по информатике В прошлом номере журнала я писал о реализации модели Briefcase с помощью ADO. В отличие от ADO, средства работы с отключенными наборами данных в
Оценок: 414 (Средняя 5 из 5)

Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.

© 2016 - 2022 BigEdu.ru