ТЕХНОЛОГИЯ ПОСТРОЕНИЯ ПРИЛОЖЕНИЙ FANSY Вязьмин Д.С., Ермаков А.Н., Крылов С.Н., Тюфягин В.А. Депозитарно-расчетный Союз, г.Москва В докладе описывается технология построения на Delphi приложений в классе “клиент-сервер” с использованием SQL-СУБД и словаря данных (метаданных). Предполагается, что информационная поддержка автоматизируемой организации будет осуществляется одним или несколькими приложениями, которые совместно используют задаваемые в технологии объекты, такие как: базы данных (БД), таблицы, процедуры, правовые профили, формы, выборки, функции, отчеты, документы, а также возможные отношения между ними. Эти же объекты используются при коллективной разработке приложений. Информация о вышеперечисленных объектах заводится и хранится в словаре данных, называемом метаданными (МД), которые являются неотъемлемой частью приложений и представляют собой интерпретируемые данные, выносимые за рамки компилируемого кода программы (фактически это программные ресурсы, хранимые в БД). Приложения обладают способностью адаптироваться к изменению МД. В дополнение к императиву Delphi-форм авторы развивают понятие выборок (мета-запросов) для работы с данными и доводят их по значимости до уровня форм. Тремя составными частями выборки являются: селекция данных, действия над данными и визуализация данных. Селекция определяет критерий отбора данных, задаваемый на языке SQL. Действия определяют операции на языке обработке данных (вставка, удаление, изменение), зависимые от текущего курсора выборки, и критерии ограничений бизнес-правил. Визуализация определяет способ отображения полей данных в контролах формы, справочник значений и т.д. Системный язык обработки данных FANSY-SCRIPT предназначен для спецификации функций, хранимых в базе МД. Ядро приложения интерпретирует код метаязыка и предоставляет средства его динамической отладки. Помимо стандартных операторов (присущих, например, языку Паскаль) язык имеет функции для манипулирования данными и управления транзакциями, функции доступа к МД, средства обработки исключительных ситуаций, а также возможность работы с published свойствами классов VCL Delphi. На этапе эксплуатации приложений возможны модификация и добавление запросов на обработку данных, функций, визуальных форм и отчетов без перекомпиляции приложений (путем корректировки МД), что характерно для систем открытого типа. Более того, возможно создание приложений без программирования на Delphi. Начальное “пустое” приложение (разработчиками поставляется набор шаблонов форм и отчетов, в результате клонирования которых получаются производные классы) может получать наполнение в виде МД, которые затем интерпретируются. FANSY-технология предоставляет два уровня защиты данных от несанкционированного доступа: 1) физический уровень прав (ФУП) - уровень СУБД и 2) логический уровень (ЛУП) -правовой профиль пользователя, проверяемый во время работы приложений. Вне зависимости от того, как расставлены физические права на таблицы, логический уровень прав на выборки проверяется всегда, и наоборот. Система позволяет вычислить ФУП путем анализа МД. Предусмотрены процедуры автоматизированной загрузки и выгрузки БД и МД, формирования физических прав пользователей СУБД на основе их правовых профилей. Таким образом, разработка FANSY-приложений сводится к проектированию выборок, конструированию форм (в значительной степени из готовых типовых фрагментов библиотеки визуальных компонентов, имеющих доступ к МД) и заведению или использованию соответствующих объектов МД (своего рода базы знаний разработчиков). Разработчик избавлен от рутины привязки типовых действий над данными (сортировка, группировка, фильтрование, вставка, удаление, экспорт) к формам приложения. При этом используются три инструментальных языка: SQL - для задания обработчиков данных, Delphi - для построения компилируемого ядра приложения, FANSY-SCRIPT - для тонкой (проблемноориентированной) настройки приложения. На выходе технологического цикла разработки получаются стандартные по интерфейсу пользователя компилируемые Windows-приложения (организованные по MDI схеме), содержащие гибкий интерпретируемый код.