Каталог >> Базы Данных >> Case >> ... |
А.С.Дружинин
При создании любого приложения разработчику приходится постоянно решать две проблемы:
и, таким образом, постоянно преобразовывать одно представление в другое.
Пользователь, как правило, работает с данными, организованными в виде самых разнообразных документов, и ему нет дела, что в базе данных они организованы совсем по другому. С развитием приложения это объективно приводит к созданию многочисленных баз данных разной структуры в разных программных средах. В результате эксплутация становится все более тяжелой, а развитие все более трудоемким.
Во многом это происходит потому, что "переменной" частью преобразования является сторона клиента, а структура данных в СУБД не меняется. На самом деле обе эти структуры данных в смысле подверженности преобразованиям должны быть совершенно равноправны. Если в СУБД кроме самих данных хранить и описания их структур, и правила преобразования одних структур данных в другие, это позволяет существенно расширить гибкость системы. Ровно таким путем пошли создатели XML-XSL:
Последнее, кстати, является частным случаем, и, естественно, на практике будет существенно расширено в плане преобразования одних структур данных в другие. XSL фактически состоит из двух крупных компонент:
Естественно, это ситуация является весьма общей, и описывает отображение элементов одного множества в другое, для чего и требуются эти два метода - Next перебирает экземпляры имеющихся в базе данных документов, Get в совокупности с описанием структуры нового документа создает экземпляры нового документа.
Такой объект мы назовем виртуальным документом. У него есть набор свойств, описанных выше, и один-единственный метод - Create. (методы Next и Get естественно отнести с свойствам этого объекта). Такой подход к созданию приложений давно и с успехом применяется в СП.АРМ. Базируется он на уникальных возможностях СУБД Cache и языка CacheObjectScript. Потребовалось разработать систему описания свойств виртуального документа и базовый набор методов для интерпретации этих свойств, что и было сделано в среде qWORD-PRO. Как только этот набор свойств и методов устоялся, в дальнейшем практически не требовалось написания программного кода. Основное внимание разработчика сосредотачивается на отображении требуемых пользователю документов на одну-единственную, весьма общую структуру данных - виртуальный документ, и применении стандартного цикла для порождения новых экземпляров документов.
В качестве базовой структуры данных была взята запись:
Record[Key].Attr[i]
Attr[i]-
имена атрибутов этой записи.
Сама запись может иметь рекурсивную структуру: Record1[Key1].Record2[Key2]...
Схематическое DTD в XML-тегах см.ниже
Record |
|
Record.Name |
Уникальное имя записи |
Record.Key |
Ключ записи |
Attr |
|
Attr.Name |
имя атрибута |
Attr.Value |
значение атрибута |
<Record Key=123 Name=Приходная_Накладная>
<Attr Name=Дата Value=31.05.2000/>
<Attr Name=Поставщик Value=InterSystems/>
<Record Key=1 Name=Товарная_строка>
<Attr Name=Nп/п Value=1/>
<Attr Name=Наименование Value=Cache_Division-64/>
</Record>
<Record Key=2 Name=Товарная_строка>
<Attr Name=Nп/п Value=2/>
<Attr Name=Наименование Value=Cache_Division-64/>
</Record>
</Record>
Фактически, был использовано два XML-тега, Запись(Record)
и Атрибут(Attr)
с разными DTD: в теле Атрибута
не может быть Записи
, в теле записи
могут быть как Записи
, так и Атрибуты
.
Если выражаться в терминах деревьев,
использовалось дерево специального вида, причем
способ отображения логического дерева на
физическое таков, что всегда однозначно можно
определить, к чему относится данный индекс - к
ключу записи, или же к атрибуту (самим атрибутам
никто не мешает иметь деревянную структуру). В
терминах реляционных баз данных использовалась
совокупность иерархических реляционных таблиц.
Функциональная часть технологии (методы) также
по смыслу аналогична XML-XSL: один набор методов
позволяет отбирать необходимые экземпляры
документов, второй создает новые экземпляры на
основе интерпретации описаний. Поскольку в
результате получаются данные с допустимой
структурой, к ним сразу же может применяться
стандартный набор методов.
В соответствии с изложенным подходом были унифицированы (по функциям и интерфейсу) и пользовательские экраны. Их фактически всего два типа, как в проводнике Windows:
Унификация экранов по функциям и элементам управления упрощает освоение приложения пользователями - достаточно научиться работать всего с двумя типами экранов.
Такой подход позволяет очень быстро создавать скелет приложения, не дожидаясь, когда будет создана полная постановка задачи (а всем разработчикам известно, что этого не происходит никогда) - ведь мы в любой момент можем сменить набор используемых документов, модифицировать их структуру. Чрезвычайно удобно оказалось создание на основе технологии виртуального документа всевозможных конверторов, аналитических запросов, справок, отчетов, описываемых ровно также, как и реальные документы, хранящиеся в базе данных. Печатные формы описываются точно таким же образом, с окончательным преобразованием в HTML-код и отображением либо IE4(5), либо в Microsoft Word-2000.
Рассмотрим вопросы практического применения этой технологии. В своей практике мы сталкивались со следующими вариантами:
В первом случае, не мудрствуя лукаво, для начала определялся состав и структура базовых первичных документов, и создавались рабочие места для работы с ними. На следующем этапе, по мере уточнения постановки и согласования ее с пользователями, описывались новые виртуальные документы, опирающиеся на уже существующие в БД документы, и так далее. Пользователи-аналитики, как правило, быстро осваивали технологию самостоятельного описания виртуальных документов, и в дальнейшем могли самостоятельно модифицировать структуру БД, создавать требуемые им отчеты, справки и т.п.
Третий вариант реализовывался по примерно такой схеме:
Site of Information
Technologies Designed by inftech@webservis.ru. |
|