Каталог >> Базы Данных >> Case >> Философия ОД |
А.С.Дружинин
Философия ОД
Настоящие заметки в некотором смысле подводят итог более чем годичных размышлений на тему "Так какой же qWORD нам нужен?". Как всегда, автор - народ, я лишь попытался сформулировать некоторые общие положения по итогам многчисленных обсуждений. Естественно, таким образом, как я сам это понимаю.
Для начала - некие тезисы.
Под базовыми структурами данных понимаются некие абстрактные информационные объекты для хранения в БД и реализованные средствами языковой среды (в свое время - MSM)
Какие же базовые структуры были выбраны, и оказались ли они самодостаточны?
В качестве базовых структур данных были выбраны всего две сущности:
Всякие детали, определяющие свойства атрибутов (понятий) - терминал, текст, обобщение, структура, кодируемость, хранимость в словаре - вторичны. Это достаточно очевидно хотя бы потому, что этих деталей настолько много, что они не могут быть базовыми. Вводились для удобства реализации.
Принципиально базовые методы делятся на два больших класса:
Естественно, действует универсальный закон - чем более общие сущности используются, тем меньше конкретных результатов можно получить.В соответствии с этим принципом была произведена специализация структур данных и методов работы с ними - введен иерархический ключ, т.е. ему была придана некоторая структура, причем вид этой структуры мог устанавливать разработчик. Сути дела это не меняет - появилась возможность дополнительной структуризации записей и их атрибутов, что тут же и было использовано:
Де-факто, стало возможным легко реализовывать логически иерархические деревянные структуры данных, используя только общие для всех баз данных сущности запись-атрибут записи, которые, в свою очередь, на самом нижнем уровне реализовывались через физические деревья! (круг, в некотором смысле, замкнулся).
Подчеркну очень важное обстоятельство, что специализация коснулась только одной сущности - структуры ключа. Ровно поэтому в базовых методах изменять ничего не пришлось. Однако такой подход предполагает и известную замкнутость - текущий релиз qWORD'а способен на всю мощь работать только с теми структурами и объектами, которые он создал сам!
Даже это - грандиозное достижение, и пример тому - развитие парадигмы обобщенного документа. Оказалось, что реализации логически деревянной структуры данных и набора связанных с этой структурой специализированных методов достаточно для саморазвития ОД только средствами, заложенными в нем самом! Подчеркну, что это касается только информационных объектов. Для активных объектов ничего не меняется - используются общие методы и структуры qWORD'а. Однако и здесь удалось исхитриться, и перейти от дизайнирования активных объектов и переопределения их методов к их гиперпараметризации. В чем смысл - а просто в рамках парадигмы ОД были созданы промежуточные структуры метаданных (например, описатель свойств папки), с которыми можно работать только узким набором методов, специфичным для ОД, а окончательную раскладку по атрибутам и записям, требуемую интерпретатором активных объектов, можно проводить автоматически. После чего все благополучно работает под управлением qWORD'а как интерпретатора.
Заметим, что в некотором смысле ОД удовлетворяет всем базовым принципам, положенным в основу qWORD. Осталось одно маленькое но: ОД не является интерпретатором объектов, которые созданы в его парадигме.
Ответом на эти вопросы мы и занимались последний год. Отталкиваясь от подходов, намеченных и частично реализованных в ОД, возникает естественный вопрос - а что целесообразно внести в базовый qWORD? Предлагаемые варианты ответов - ниже
Вот, собственно, и вся триада, которую надо бы развивать на основе имеющегося опыта и представлений:
Какие новые базовые структуры данных нам желательны? Ответ - см. здесь. Очень странно, что имея дерево в качестве фундаментальнейшей физической структуры данных, на которой реализовано сейчас все, не иметь точно такой же логической структуры и специфического набора методов работы с ним. Во-всяком случае, уж для серверных-то компонент это точно необходимо. А для клиентских это необходимо ровно так же! Ведь вся объектная парадигма - это одно сплошное дерево, реализуемое с той или иной степенью успешности в той или иной языковой среде. Перечисляю (только мне известное: HTML; JavaScript; Java; VisualBasic,...)
Если мы реализуем как базисную новую структуру - дерево, у нас (в М) останется только один стратегический резерв, выгодно отличающий нас от большинства остальных систем - возможность работы с именами, как с данными. Почему бы не использовать эту возможность там, где это можно? Работа с именами, как с данными и позволит нам реализовать п.1 предлагаемых ответов. Что такое объектная ссылка, как не имя объекта? Почему мы не можем хранить в qWORD'овской БД только ссылку на объект, а все его атрибуты и прочее - пусть он сам хранит, применяет и т.п.? Не понимаю, что этому мешает? Идя таким путем, мы бы могли воспользоваться разделением труда - зачем нам реализовывать все самим, если это кто-то уже сделал? Ведь не переписываем же мы с начала до конца базовую ОС? Зачем нам все втаскивать в нашу БД, если у объекта есть свои собственные хранилища? Внесем в нашу БД только часть информации об объекте, достаточной для его однозначной идентификации и поисков по значениям, и хорош.
Вторая ипостась тесно связана с первой. Если мы допускаем хранение ссылок на объкты (для нас - это просто данные, к которым применима большая часть общих методов qWORD'а), то естественным было бы допустить и активность этих объектов, т.е. если у него есть методы, то иметь возможность их выполнять, как, вообще-то во всем мире и делается. Тогда ActiveX'ы быстро станут неотъемлемой частью qWORD'а, и сам он сможет предоставлять свои объекты данных как ActiveQ (ясно, что все запихать в один модулечек нам не удасться, потребуется среда для их интрепретации и исполнения, ну и что? Для того, кто вызывает, это будет выглядеть как классический ActiveX).
Третья ипостась - приятное, но очень желательное дополнение. Можно, конечно, объявить весь qWORD набором объектов, и вызовы к ним писать из другой среды. Кто хочет, рано или поздно сможет это. Ну а нам-то это нафиг нужно? Мы-то уже научились генерировать активные объекты в ответ на запрос пользователя, в которых уже заложено не только то, что пользователю надо сей секунд, но и то, что ему потребуется в следующий момент. Осталось сделать один логический шаг в духе WebLink - отдавать описание (HTML-страницу), а уж пускай ее интерпретирует кто-то другой так, как сумеет. Если объект предназначен для интерпретации в родной среде - очень хорошо, мы это сделаем оптимально, если в чужой - мы в силах облегчить дальнейшее взаимодействие с нами же. Что потребуется - протокол некий потребуется. Свой-Свой, Свой-Чужой, Чужой-свой. С первым (С-С) - нет проблем, какой захотим, такой и будет. Второй - придется что-то знать о этом чужом. Например, для HTML знаем, что это за протокол. Наконец, третий - это он о нас должен что-то знать. А мы ему подпихнем не только протокол, но и модуль, его реализующий, в виде специализированного ActiveX'а, например. Если подумать, то можно иметь один общий логический стандарт + возможность быстрого перекладывания этого логического стандарта для конкретного чужака - не так уж их много и будет. А для разработчика будет все едино! Тогда мы сможем разрабатывать приложение в привычной для нас среде Workstation, а исполнять на чем-нибудь другом. Все так делают, и очень довольны - мы создаем HTML-страницу в редакторе (или вообще генерим на ходу), а исполняем в браузере.
Site of Information
Technologies Designed by inftech@webservis.ru. |
|