Наталия Елманова
Компьютер Пресс - CD, 1999, N 2
© Copyright N.Elmanova & ComputerPress Magazine.
Данная статья посвящена двум продуктам продуктам рижской компании BatSoft - библиотеке OverPLAY для Delphi и C++Builder, полезной при разработке модульных многофункциональных приложений, и утилите OverDig, позволяющей управлять серверными объектами IB Database.
Библиотека компонентов и классов Delphi/C++Builder OverPLAY 3.0 разработана рижской компанией BatSoft - одним из ведущих партнеров Inprise на территории бывшего СССР и одним из ведущих компаний-разработчиков Латвии. В настоящее время существуют версии этой библиотеки для Delphi 4 и C++Builder 3. Trial-версию этой библиотеки можно найти на web-сайте компании BatSoft www.batsoft.com.
Эта библиотека представляет интерес для разработчиков многофункциональных приложений, таких как бухгалтерские программы, программное обеспечение складов и торговых предприятий, банковские информационные системы, то есть приложений, которые могут состоять из нескольких модулей и поставляться разным заказчикам в разных комплектах. Эта библиотека представляет собой набор классов и компонентов, предназначенных для облегчения разбиения приложения на несколько динамически загружаемых библиотек и облегчения управления ими без написания кода для загрузки библиотек.
Простейшим примером применения OverPLAY может быть встраивание отчета с помощью компонентов QuickReports не внутрь исполняемого файла приложения, как это делается обычно, а в виде динамически загружаемой библиотеки - DLL. В этом случае при очередном изменении форм отчетности (что в настоящее время очень актуально для нашей страны ввиду весьма динамично меняющегося законодательства) можно предоставлять заказчику только новые версии этой библиотеки или другие дополнительные библиотеки, содержащие другие отчеты, без предоставления новой версии самого приложения.
Помимо этого, содержащиеся в этой библиотеке классы позволяют предоставить пользователям применяющих ее приложений возможность настройки функциональности своих приложений путем выбора модулей, нужных данному пользователю, а также возможность добавления новых модулей, приобретаемых пользователем по мере необходимости. При этом добавление новых модулей можно производить непосредственно во время выполнения приложения и даже разрабатывать приложения, способные подключать модули, о существовании которых приложение "не знает".
Отметим, что разработавшая эту библиотеку рижская компания BatSoft - автор самой популярной в Латвии на сегодняшний день бухгалтерской программы, в которой реализованы идеи разбиения многофункционального приложения на приобретаемые отдельно модули и использован рассмотренный в данной статье инструментарий.
Библиотека OverPLAY 3.0 содержит четыре невизуальных компонента:TAppServer, TDLLServer, TTaskServer и TTaskClient.
Рис. 1. Компоненты библиотеки OverPLAY
Компонент TTaskServer предназначен для объявления задачи в библиотеке-модуле или исполняемом файле. Он может находиться на главной форме приложения или на скрытой форме, содержащейся в DLL. Так как модуль может содержать несколько задач, таких компонентов на форме также может быть несколько.
Компонент TAppServer помещается в исполняемый файл в одном экземпляре. Свойства этого компонента содержат всю необходимую информацию о зарегистрированных (то есть известных в данный момент исполняемому файлу) компонентах TTaskServer и TTaskClient из всех загруженных модулей.
Компонент TDLLServer предназначен для объявления динамически загружаемой библиотеки модулем, подлежащим регистрации. Он обычно помещается на скрытую форму, содержащуюся в DLL.
Компонент TTaskClient позволяет обращаться к свойствам и методам компонента TTaskServer, обеспечивая интерфейс к нему в других модулях.
Приложения, использующие библиотеку OverPLAY, могут быть разбиты на несколько частей. Первая часть представляет собой обычно исполняемый файл, управляющий загрузкой модулей, обменом информацией между ними и предоставляющий пользователю возможность обратиться к тому или иному модулю. Остальные части представляют собой модули, выполненные в виде динамически загружаемых библиотек.
При создании многофункционального приложения с использованием OverPLAY следует спланировать разделение функций приложения между модулями, учитывая зависимость между ними - зависящие друг от друга функции имеет смысл поместить в один модуль.
Создание модульного приложения обычно начинается с создания исполняемого файла, главная форма которого содержит компонент TAppServer. При создании исполняемого файла обычно следует предусмотреть управляющие элементы, которые будут использоваться для обращения к задачам из дополнительно загружаемых модулей (например, кнопки, недоступные до момента загрузки и регистрации модуля).
Рис. 2. Главная форма исполняемого файла, использующего компоненты OverPLAY
Далее следует создать дополнительно загружаемые модули - DLL. Такой модуль должен содержать скрытую форму, на которой должен быть помещен компонент TDLLServer, и в секции инициализации библиотеки следует присвоить имя этой формы глобальной переменной OverPlayMainForm (библиотека поставляется с нескольким примерами различной степени сложности, где можно найти образцы соответствующего кода, и весьма подробной справкой, содержащей, помимо общепринятого в таких случаях описания классов и компонентов, советы по созданию модульных приложений).
Рис. 3. Скрытая форма дополнительно загружаемого модуля
При запуске исполняемого файла пользователь может загрузить и зарегистрировать необходимые библиотеки. После этого задачи из этих библиотек станут также доступны для регистрации и дальнейшего использования.
Рис. 4. Приложение, использующее дополнительно загружаемые модули, на этапе выполнения
Рис. 5. Список зарегистрированных дополнительных модулей и содержащихся в них задач
Отметим, что при желании можно организовать использование задачами общих ресурсов, например, соединений с базой данных (соответствующий пример, содержащий также динамически загружаемые библиотеки с отчетами, есть в комплекте поставки библиотеки).
Конечно, идея создания модульных приложений не нова. В частности, использование технологии COM, предназначенной в первую очередь для создания приложений, использующих другие приложения и библиотеки в качестве поставщиков тех или иных сервисов, также позволяет создать модульное многофункциональное приложение. Однако взаимодействие COM-серверов и клиентов предполагает маршалинг (обмен пакетами данных) с помощью вызовов удаленных процедур (даже при условии присутствия сервера и клиента на одном компьютере), что, с одной стороны, позволяет иметь одну и ту же модель программирования независимо от того, внутренним, локальным или удаленным является COM-сервер, а, с другой стороны, вынуждает расплачиваться за эту общность более низкой производительностью и ограничениями на используемые типы данных. Поэтому построение модульного приложения из нескольких взаимодействующих друг с другом DLL в случае, когда используемые сервисы не предполагается запускать удаленно, и следовательно, маршалинг и вызов удаленных процедур не требуются, оправдано как с точки зрения производительности, так и с точки зрения упрощения процесса разработки приложений.
Утилита OverDig, также разработанная компанией BatSoft, представляет собой инструмент, облегчающий управление объектами сервера IB Database, такими как триггеры, хранимые процедуры, представления, домены, исключения, генераторы. Эта утилита может быть весьма полезна разработчикам приложений, использующих этот сервер в качестве встроенной СУБД в составе своих приложений. Trial-версию этой утилиты можно найти на web-сайте компании BatSoft www.batsoft.com.
OverDig обладает удобным интуитивным интерфейсом. Различные типы серверных объектов можно просматривать в отдельных MDI-окнах в табличном виде, при этом возможна сортировка по любой из колонок таблицы (она осуществляется щелчком мыши по соответствующему заголовку). При просмотре данных возможно также осуществить поиск нужной строки по значению в данной колонке таблицы.
Рис. 6. Просмотр и редактирование серверных объектов и табличных данных в OverPlay
Возможно также копирование данных из таблицы в буфер обмена как в виде отдельных ячеек, так и в виде целой таблицы (в последнем случае пользователь может выбрать формат для копирования данных):
Рис. 7. Копирование табличных данных в буфер обмена
Возможен также просмотр содержимого memo-полей в отдельных окнах.
Утилита OverDig содержит несколько различных редакторов серверных объектов. Редакторы триггеров и хранимых процедур способны выделять другим цветом или шрифтом синтаксические конструкции (так же как и редакторы кода Delphi и C++Builder).
Рис. 8. Редактор хранимых процедур
Помимо синтаксического выделения, все редакторы серверных объектов обладают стандартными современными возможностями редактирования, такими как установка закладок, контекстный поиск и замена, использование автозамены и шаблонов кода, возможность отката любого количества операций редактирования, назначение "горячих" клавиш, перетаскивание текста мышью, и др.
OverDig содержит несколько встроенных экспертов, облегчающих генерацию текстов SQL-запросов (Select... , Select into..., For Select into.... , Insert ... ,Update... ). Например, для генерации запроса INSERT можно выбрать из списка таблицу, внести значения нужных полей и получить текст запроса.
Рис. 9. Эксперт для генерации SQL-предложения INSERT
Рис. 10. Результат работы эксперта для генерации SQL-предложения INSERT Для генерации запроса SELECT также можно выбрать имя таблицы, полей, включаемых в запрос, и полей, включаемых в условия запроса.
Рис. 11. Эксперт для генерации SQL-предложения SELECT
Рис. 12. Результат работы эксперта для генерации SQL-предложения SELECT
Отметим, что можно сгенерировать и выполнить вместе несколько SQL-запросов (что выгодно отличает эти эксперты от SQL Builder или других генераторов запросов). Сгенерированные с помощью экспертов запросы можно помещать в редактор DDL-сценариев, позволяющий редактировать несколько SQL-предложений или файлов с ними, а также выполнять их.
OverDig позволяет создать репозитарий объектов, в котором с целью повторного использования хранятся исходные тексты DDL-предложений для их генерации. Репозитарий представляет собой таблицу формата Paradox, в memo-полях которой хранятся DDL-сценарии.
Рис. 13. Репозитарий объектов
OverDig позволяет зашифровать тексты триггеров и хранимых процедур так, чтобы они были недоступны другим пользователям, что нередко бывает удобно при поставке IB Database вместе с базой данный в качестве встроенного сервера в составе готовой информационной системы. Зашифрованные объекты хранятся в базе данных вместо исходных объектов, и их исходный текст доступен после ввода пароля.
Рис. 14. Шифорвание текстов серверных объектов
Информация о выполненных во время сеанса работы действиях может быть сохранена в log-файлах. Log-файлы представляют собой таблицы формата Paradox; при необходимости log-файлов может быть несколько.
Рис. 15. Просмотр log-файла
Таким образом, OverDig представляет собой весьма удобный инструмент для управления серверной частью информационных систем на основе IB Database и является неплохим дополнением к утилитам администрирования IB Database, входящим в состав ее клиентской части.
Координаты компании BatSoft: BatSoft Ltd. Peldu 26/28, LV-1050, Riga, Latvia Тел. (+371) 7228649 Факс (+371) 7227859 E-mail info@batsoft.com; http://www.batsoft.com. |