Clarion: мощное оружие, бьющее точно в цель. Clarion сегодня
Clarion сегодня Еще года три назад о системе Clarion не было практически никаких публикаций. Многие эксперты продолжали упорно замалчивать и не замечать ее. Но ситуация меняется. Несмотря на отсутствие внешних инвестиций для разработки продукта и его продвижения на рынок, разработчик Clarion TopSpeed Corporation отмечает постоянный рост интереса к своему детищу во многих странах, в том числе и в России. Это вызвано не только высоким уровнем квалификации отечественных специалистов, но и крайне благоприятной почвой для становления технологии Clarion, главной особенностью которой является быстрая реконфигурация сложных информационных систем.
Как было отмечено в предыдущем материале об истории создания языка, его фундамент базируется на усовершенствованной TopSpeed-технологии компиляторов, которая берет начало от TopSpeed-семейства профессиональных компиляторов С, С++, Modula2, Pascal, разработанной бывшими сотрудниками Borland International. Основу технологии составляет специальный промежуточный язык (ноу-хау фирмы), который позволяет легко добавлять в уже существующее семейство компиляторов новые языки программирования. Впечатляющая компактность получаемых систем достигается за счет особой технологии интеллектуальной компоновки объектного кода и упаковки методов при работе с классами (smart linking и smart method linking).
Язык четвертого поколения Clarion предназначен прежде всего для разработки бизнес-приложений. Однако он может быть с успехом использован и для реализации самых разных программных продуктов, вне зависимости от того, что в них первично - данные (информационные системы), управление (системы управления процессами) или пользовательский интерфейс (обучающие системы и компьютерные игры). Ведь Clarion поддерживает сразу четыре разные парадигмы программирования: процедурную, событийную (отличная от принятой в Windows обработка событий), сущностную (абстрактные типы данных WINDOW, PULLDOWN, FILE, QUEUE, REPORT и др.) и объектно-ориентированную (Java-подобные средства с одинарным наследованием классов). Эти и без того широкие возможности дополняются реализацией многопоточности (multithreading), MPI, DDE и поддержкой OLE (OCX).
Язык шаблонов
Отличительной особенностью технологии Clarion является язык шаблонов (template language), опирающийся на словарь данных и репозитарий приложения (процедурная модель). С его помощью формируется системный репозитарий на основе языка макрообработки с визуальным интерфейсом, что позволяет генерировать произвольные (!) исходные тексты, а не только тексты на языке Clarion. Специалисты используют эту особенность для создания систем кроссразработки под разные языки и платформы. Язык шаблонов может применяться в компонентном программировании для формирования скелета (component framework), на который "наращивают" различные компоненты (например, ОСХ).
Программные шаблоны - основные строительные блоки, обеспечивающие фундамент как вариантного, так и компонентного программирования. Благодаря механизму программных шаблонов можно почти "на автомате" строить работоспособный макет и, фактически не прибегая к ручному кодированию, без потери логических связей и структуры данных доводить его до нормальной системы. Макетирование - одна из ключевых особенностей Clarion. Это понятие, приобретающее все больший вес в традиционном жизненном цикле программного продукта, развивается и совершенствуется в технологии Clarion с первых дней ее рождения. Именно макет является отправной точкой быстрого построения и удобного сопровождения достаточно сложных информационных систем. Если инструментальная среда позволяет создавать действующие макеты, которые с трудом можно отличить от готовой прикладной системы, то это всегда говорит об огромном потенциале и высоком качестве подобной среды. При работе с технологией Clarion между макетом и готовой системой подчас очень трудно провести грань. Все здесь зависит от того, какие требования вы (или ваш заказчик) предъявляете к конечной системе (исходя, разумеется, из реальных ограничений на время разработки).
При создании в среде Clarion конкретного приложения после постановки задачи и формулировки требований следует проектирование, причем, что весьма важно, не конечного приложения, а информационной модели, с которой этому приложению предстоит в дальнейшем работать. Словарь данных, в котором хранится информационная модель, является отправной точкой для автоматического создания исполняемого файла вашего конечного приложения. При этом вы избегаете явного участия в этапах кодирования, отладки и тестирования. За счет эксперт-программ и механизма шаблонов все они проходят "на автомате". Таким образом, после этапа проектирования вы переходите к макетированию и в результате получаете действующий макет вашего приложения. Если теперь потребуется доведение макета до "товарного вида", то это можно будет сделать за счет корректировки в генераторе приложений (Application Generator) структуры и параметров программы, быть может, даже не прибегая к ручному кодированию отдельных участков на языке Clarion. Замечательное свойство технологии Cla-rion состоит в том, что если расхождения между автоматически полученным макетом и требуемым приложением достаточно значительны, то, изучив язык шаблонов и накопив немного опыта, вы сможете самостоятельно готовить для себя нужные эксперт-программы, настроенные на специфику решаемых вами задач, а затем просто "штамповать" готовые приложения.
Шаблоны подгоняются друг к другу и к общему каркасу всего приложения таким образом, чтобы дать возможность разработчику использовать их почти столь же легко, как и детали известного детского конструктора LEGO. Давайте теперь попробуем разобраться в том, что же на самом деле представляет собой программный шаблон для среды Clarion.
Шаблон - это параметризованный фрагмент исходного текста, написанный на специальном языке - языке шаблонов (Template Language). Средства языка от целевого исходного текста отделены за счет простых синтаксических соглашений (перед операторами языка ставится префикс #, а перед переменными - префикс %).
Язык шаблонов выполняет следующие функции:
- предоставляет средства (#PROMPT, #VALIDATE, #BUTTON, #IMAGE, #FIELD и др.) для организации внешнего интерфейса с разработчиком (инженером-конструктором) приложения;
- результаты заполнения визуальных форм запоминаются в переменных языка шаблонов;
- через встроенные переменные (%FieldName, %RelationKey, %Target32, %DriverSQL, %LocalData, %ProgramTimeCreated и др.) обеспечивает своеобразный мост со словарем данных, а также с самой инструментальной средой Clarion;
- на основе заданных и встроенных переменных обеспечивает управление процессом генерации исходного текста с использованием операторов ветвления и цикла (#IF, #CASE, #FOR, #LOOP);
- обладает богатыми средствами работы с файлами, которые участвуют в процессе генерации исходных текстов (#INCLUDE, #CREATE, #OPEN, #READ, #REPLACE, #REDIRECT, #APPEND, #EXPORT, #IMPORT и др.);
- управляет генерацией комментария;
- имеет большой набор разных типов шаблонов, начиная от процедурного (#PROCEDURE), кодового (#CODE), диалогового (#CONTROL) и распределенного (#EXTENSION) и заканчивая утилитами (#UTILITY);
- позволяет создавать эксперт-программы (wizard), формирующие различные технологические цепочки для синтеза и анализа программной системы.
Язык шаблонов обладает такой выразительностью, что его вполне можно использовать в качестве обычного языка программирования (например, при написании вспомогательных утилит инструментальной среды). Другое дело, что эффективность его работы может заметно уступать обычным языкам.
Итак, шаблон - это особым образом оформленный полуфабрикат (каркас) исходного текста на некоем целевом языке программирования (в нашем случае - на языке Clarion). Одно из самых замечательных свойств языка шаблонов состоит в том, что он позволяет управлять логикой генерации текстов для любых языков (C/C++, Java, Object Pascal, Modula-2, Fortran, Prolog, Lisp и др.) и даже генерацией простых текстовых файлов произвольной структуры (например, HTML, XML).
Шаблоны задают первый уровень (каркасный) компонентного программирования в технологии Cla-rion. Второй уровень (кодовый) определяют компоненты в традиционном понимании (VBX, OCX, ActiveX-компоненты).
В Clarion активно используются решения объектно-ориентированного программирования в качестве основы исходного текста, что позволяет заменить программные копии на ссылки и еще больше сократить объем генерируемого объектного кода. Фирма TopSpeed заметно продвинулась в этом направлении, переведя в среде Clarion 4 часть своих базовых шаблонов на рельсы ООП и предоставив разработчику на выбор две функционально идентичные архитектуры на основе шаблонов - классическую и объектно-ориентированную. Как известно, новое - это хорошо забытое старое. И в этом смысле шаблоны по своей сути очень близки развитым средствам макропроцессоров, весьма популярным еще в 70-х годах. Но в отличие от тех средств шаблоны не просто параметризуют текст, а имеют средства организации пользовательского интерфейса для инженера-конструктора, четкую структуризацию элементов специального языка шаблонов и программный интерфейс (встроенные и заданные переменные) с контекстом макрообработки.
Если шаблоны столь всемогущи, то возникает вполне законный вопрос: зачем понадобилось изобретать специальный язык программирования, когда все можно сделать на том же C++? Дело в том, что при подобном акценте на программные шаблоны универсальный язык программирования, не обладающий специальными высокоуровневыми языковыми средствами, ничем не лучше обычного ассемблера (тем более, что фирма TopSpeed откровенно подчеркивает свою ориентацию именно на платформу Wintel). Вот почему язык Clarion в дополнение к традиционным средствам обычных языков добавляет некие новые возможности, обеспечивает компактность представления и надежность статического контроля ошибок еще на этапе компиляции. Наиболее важными среди них являются средства обработки событий, ненаследуемые классы (WINDOW, FILE, VIEW, QUEUE, REPORT и др.), которые как бы являются дальнейшим уточнением процедурных шаблонов, а также средства для процедурной работы с файлами баз данных, являющиеся надстройкой над ODBC/SQL-уровнем коммерческих СУБД. Еще один немаловажный момент состоит в том, что какими бы изощренными ни были сделаны шаблоны, в любой момент может появиться потребность слегка их подправить. Вот почему в шаблонах Clarion активно используются для этой цели программные вставки (embeds). Так что, чем компактнее и понятнее запись кода, тем проще будет сопровождать весь проект.
Архитектура работы с файлами БД
Работа с реляционными таблицами, хранящимися в файлах БД, является одним из самых сильных мест системы Clarion. Схема БД (структура и взаимосвязь таблиц) хранится в специальном словаре данных. Словарь данных определяет первый уровень абстракции.
Вторым уровнем является язык шаблонов (и прежде всего встроенные переменные, обеспечивающие интерфейс со словарем). На этом уровне в соответствии со словарем формируется логика связей с учетом отношений, ограничений ссылочной целостности, диапазонов представления значений и т.п. (все то, что ныне называется модным термином "бизнес-правила").
Третий уровень абстракции, на который производится отображение первых двух, - это язык определения данных, являющийся неотъемлемой частью языка Clarion. Помимо реляционных таблиц (FILE), на нем описываются и вспомогательные структуры QUEUE (список записей, хранящийся в оперативной памяти) и VIEW (виртуальная таблица).
Четвертый уровень абстракции - это язык манипулирования данными, также неразрывно связанный с языком Clarion. Для него характерны операторы файлового доступа (OPEN, CREATE, PACK, STREAM, FLUSH, REMOVE, RENAME), операторы модификации данных (ADD, APPEND, DELETE, PUT), операторы блокировки доступа (LOCK, UNLOCK, HOLD, RELEASE), операторы позиционирования (SET, NEXT, PREVIOUS, SKIP, GET), операторы поддержки транзакций (COMMIT, LOGOUT, ROLLBACK), а также вспомогательные операторы (POSITION, POINTER, RECORDS, EOF, SEND).
Пятый уровень абстракции - это уровень внутренней унификации работы с таблицами разных СУБД (механизм замещаемых драйверов БД). Именно здесь проходит "водораздел" между стандартной и профессиональной редакцией среды Clarion (в поставке стандартной версии обеспечивается работа только с драйверами форматов CLARION и TOPSPEED). Форма физического представления реляционных таблиц (и специфика работы с ними) должна оказывать минимальное воздействие на разработку информационных приложений. Вот почему разработчики Clarion реализовали этот механизм еще в версии Clarion Database Developer 3.0 (для DOS), созданной около 6 лет назад. Суть его состоит в том, что вся работа ведется через абстрактное понятие таблицы (файла). Конкретизация же физического представления осуществляется в атрибуте DRIVER структуры FILE. Для перехода на работу с другим представлением часто достаточно просто сменить символьную строку в атрибуте DRIVER, отвечающую за подключение соответствующей DLL-библиотеки. Понятно, что простого переключения может оказаться недостаточно, поэтому специфика работы с различным физическим представлением таблиц в технологии Clarion осуществляется за счет поддержания многообразия типов данных (в системе типов языка Clarion представлены практически все возможные типы, которые могут встретиться в таблицах других СУБД), и за счет оптимизации доступа (настройки параметров конкретного драйвера). При переносе Clarion в среду Windows к драйверам Btrieve, FoxPro, Clipper, dBase3, dBase4, DOS, ASCII и BASIC добавились драйвер ODBC и прямые SQL-драйверы для промышленных СУБД.
Шестой уровень абстракции - уровень внешней унификации работы с таблицами разных СУБД, который опирается на ставшую стандартом де-факто для платформы Wintel спецификацию ODBC (Open DataBase Connectivity). Работа в рамках ODBC строится по трехзвенной цепочке: первичный (front-end) ODBC-драйвер со стороны языка Clarion, стандартный менеджер ODBC (как связующий элемент) и вторичный (back-end) ODBC-драйвер, обеспечивающий доступ к источнику данных в формате конкретной СУБД. Понятно, что такое количество промежуточных слоев, да еще реализованных разными фирмами, может сказаться на функциональности интерфейса (типы данных, возврат результатов запросов, нюансы совместимости) и, что особенно важно, на производительности. Что касается последних сомнений, то быстродействие нынешнего поколения многих ODBC-средств таково, что для той же системы Clarion падение производительности по сравнению с прямыми SQL-драйверами составляет всего лишь около 15-20%.
Таким образом, мы вплотную подошли к седьмому уровню абстракции работы с базами данных в технологии Clarion, а именно, к уровню SQL-драйверов. Именно он и позволяет обеспечить достаточно полноценную работу в архитектуре клиент/сервер, вне зависимости от того, какой моделью доступа к удаленным данным вы пользуетесь (RDA, DBS или AS). В случае RDA-модели (Remote Data Access) логика обработки практически целиком исполняется на клиентской части. И именно эта модель достаточно легко может быть реализована при интеграции Clarion-приложения (как клиентской части) с сервером баз данных. Однако этому уровню в наибольшей степени подходит использование ODBC, а не SQL. В случае DBS-модели (DataBase Server) большая часть логики обработки перекочевывает с клиента на сервер. Здесь уже требуется активно задействовать механизмы хранимых процедур и триггеров БД. Для этого случая больше подходит использование прямых SQL-драйверов. Здесь уже можно задействовать специфику того или иного SQL-сервера (SQL-хинты, script-файлы и т.п.). Эффективность взаимодействия с SQL-сервером из Clarion-приложения можно повысить за счет использования механизма свойств (property), встроенного в язык Clarion для доступа к методам ненаследуемых классов. В случае же AS-модели (Application Server) между клиентом и сервером данных появляется третье, промежуточное звено, задача которого разгрузить сервер данных, почти полностью убрав с него логику. Реализация AS-модели взаимодействия с помощью Clarion также возможна, но является наименее проработанной. Как известно, центральную роль в этой модели играют мониторы обработки транзакций, а штатных решений стыковки с ними ни на уровне шаблонов, ни на уровне API-интерфейсов система Clarion пока не предоставляет.
Необходимость учета специфики работы с SQL-серверами позволяет в полную силу задействовать возможности механизма шаблонов. Ведь именно вариативное программирование, которое в Clarion может быть реализовано на более высоком уровне абстракции, нежели простая и привычная условная компиляция, позволяет эффективно решить задачу объединения общего с частным. Чисто технологически это открывает и путь для более четкого разделения труда в командах разработчиков: теперь результаты работы специалистов по организации интерфейса с SQL-серверами могут быть представлены в формальном виде, пригодном для непосредственного использования разработчиками другой специализации. SQL-шаблоны Энди Степлтона в этом смысле - хороший опыт, который стоит взять на вооружение.
По материалам журнала "КомпьютерПресс", еженедельника "ComputerWeek" подготовил Максим Костюченко
Как было отмечено в предыдущем материале об истории создания языка, его фундамент базируется на усовершенствованной TopSpeed-технологии компиляторов, которая берет начало от TopSpeed-семейства профессиональных компиляторов С, С++, Modula2, Pascal, разработанной бывшими сотрудниками Borland International. Основу технологии составляет специальный промежуточный язык (ноу-хау фирмы), который позволяет легко добавлять в уже существующее семейство компиляторов новые языки программирования. Впечатляющая компактность получаемых систем достигается за счет особой технологии интеллектуальной компоновки объектного кода и упаковки методов при работе с классами (smart linking и smart method linking).
Язык четвертого поколения Clarion предназначен прежде всего для разработки бизнес-приложений. Однако он может быть с успехом использован и для реализации самых разных программных продуктов, вне зависимости от того, что в них первично - данные (информационные системы), управление (системы управления процессами) или пользовательский интерфейс (обучающие системы и компьютерные игры). Ведь Clarion поддерживает сразу четыре разные парадигмы программирования: процедурную, событийную (отличная от принятой в Windows обработка событий), сущностную (абстрактные типы данных WINDOW, PULLDOWN, FILE, QUEUE, REPORT и др.) и объектно-ориентированную (Java-подобные средства с одинарным наследованием классов). Эти и без того широкие возможности дополняются реализацией многопоточности (multithreading), MPI, DDE и поддержкой OLE (OCX).
Язык шаблонов
Отличительной особенностью технологии Clarion является язык шаблонов (template language), опирающийся на словарь данных и репозитарий приложения (процедурная модель). С его помощью формируется системный репозитарий на основе языка макрообработки с визуальным интерфейсом, что позволяет генерировать произвольные (!) исходные тексты, а не только тексты на языке Clarion. Специалисты используют эту особенность для создания систем кроссразработки под разные языки и платформы. Язык шаблонов может применяться в компонентном программировании для формирования скелета (component framework), на который "наращивают" различные компоненты (например, ОСХ).
Программные шаблоны - основные строительные блоки, обеспечивающие фундамент как вариантного, так и компонентного программирования. Благодаря механизму программных шаблонов можно почти "на автомате" строить работоспособный макет и, фактически не прибегая к ручному кодированию, без потери логических связей и структуры данных доводить его до нормальной системы. Макетирование - одна из ключевых особенностей Clarion. Это понятие, приобретающее все больший вес в традиционном жизненном цикле программного продукта, развивается и совершенствуется в технологии Clarion с первых дней ее рождения. Именно макет является отправной точкой быстрого построения и удобного сопровождения достаточно сложных информационных систем. Если инструментальная среда позволяет создавать действующие макеты, которые с трудом можно отличить от готовой прикладной системы, то это всегда говорит об огромном потенциале и высоком качестве подобной среды. При работе с технологией Clarion между макетом и готовой системой подчас очень трудно провести грань. Все здесь зависит от того, какие требования вы (или ваш заказчик) предъявляете к конечной системе (исходя, разумеется, из реальных ограничений на время разработки).
При создании в среде Clarion конкретного приложения после постановки задачи и формулировки требований следует проектирование, причем, что весьма важно, не конечного приложения, а информационной модели, с которой этому приложению предстоит в дальнейшем работать. Словарь данных, в котором хранится информационная модель, является отправной точкой для автоматического создания исполняемого файла вашего конечного приложения. При этом вы избегаете явного участия в этапах кодирования, отладки и тестирования. За счет эксперт-программ и механизма шаблонов все они проходят "на автомате". Таким образом, после этапа проектирования вы переходите к макетированию и в результате получаете действующий макет вашего приложения. Если теперь потребуется доведение макета до "товарного вида", то это можно будет сделать за счет корректировки в генераторе приложений (Application Generator) структуры и параметров программы, быть может, даже не прибегая к ручному кодированию отдельных участков на языке Clarion. Замечательное свойство технологии Cla-rion состоит в том, что если расхождения между автоматически полученным макетом и требуемым приложением достаточно значительны, то, изучив язык шаблонов и накопив немного опыта, вы сможете самостоятельно готовить для себя нужные эксперт-программы, настроенные на специфику решаемых вами задач, а затем просто "штамповать" готовые приложения.
Шаблоны подгоняются друг к другу и к общему каркасу всего приложения таким образом, чтобы дать возможность разработчику использовать их почти столь же легко, как и детали известного детского конструктора LEGO. Давайте теперь попробуем разобраться в том, что же на самом деле представляет собой программный шаблон для среды Clarion.
Шаблон - это параметризованный фрагмент исходного текста, написанный на специальном языке - языке шаблонов (Template Language). Средства языка от целевого исходного текста отделены за счет простых синтаксических соглашений (перед операторами языка ставится префикс #, а перед переменными - префикс %).
Язык шаблонов выполняет следующие функции:
- предоставляет средства (#PROMPT, #VALIDATE, #BUTTON, #IMAGE, #FIELD и др.) для организации внешнего интерфейса с разработчиком (инженером-конструктором) приложения;
- результаты заполнения визуальных форм запоминаются в переменных языка шаблонов;
- через встроенные переменные (%FieldName, %RelationKey, %Target32, %DriverSQL, %LocalData, %ProgramTimeCreated и др.) обеспечивает своеобразный мост со словарем данных, а также с самой инструментальной средой Clarion;
- на основе заданных и встроенных переменных обеспечивает управление процессом генерации исходного текста с использованием операторов ветвления и цикла (#IF, #CASE, #FOR, #LOOP);
- обладает богатыми средствами работы с файлами, которые участвуют в процессе генерации исходных текстов (#INCLUDE, #CREATE, #OPEN, #READ, #REPLACE, #REDIRECT, #APPEND, #EXPORT, #IMPORT и др.);
- управляет генерацией комментария;
- имеет большой набор разных типов шаблонов, начиная от процедурного (#PROCEDURE), кодового (#CODE), диалогового (#CONTROL) и распределенного (#EXTENSION) и заканчивая утилитами (#UTILITY);
- позволяет создавать эксперт-программы (wizard), формирующие различные технологические цепочки для синтеза и анализа программной системы.
Язык шаблонов обладает такой выразительностью, что его вполне можно использовать в качестве обычного языка программирования (например, при написании вспомогательных утилит инструментальной среды). Другое дело, что эффективность его работы может заметно уступать обычным языкам.
Итак, шаблон - это особым образом оформленный полуфабрикат (каркас) исходного текста на некоем целевом языке программирования (в нашем случае - на языке Clarion). Одно из самых замечательных свойств языка шаблонов состоит в том, что он позволяет управлять логикой генерации текстов для любых языков (C/C++, Java, Object Pascal, Modula-2, Fortran, Prolog, Lisp и др.) и даже генерацией простых текстовых файлов произвольной структуры (например, HTML, XML).
Шаблоны задают первый уровень (каркасный) компонентного программирования в технологии Cla-rion. Второй уровень (кодовый) определяют компоненты в традиционном понимании (VBX, OCX, ActiveX-компоненты).
В Clarion активно используются решения объектно-ориентированного программирования в качестве основы исходного текста, что позволяет заменить программные копии на ссылки и еще больше сократить объем генерируемого объектного кода. Фирма TopSpeed заметно продвинулась в этом направлении, переведя в среде Clarion 4 часть своих базовых шаблонов на рельсы ООП и предоставив разработчику на выбор две функционально идентичные архитектуры на основе шаблонов - классическую и объектно-ориентированную. Как известно, новое - это хорошо забытое старое. И в этом смысле шаблоны по своей сути очень близки развитым средствам макропроцессоров, весьма популярным еще в 70-х годах. Но в отличие от тех средств шаблоны не просто параметризуют текст, а имеют средства организации пользовательского интерфейса для инженера-конструктора, четкую структуризацию элементов специального языка шаблонов и программный интерфейс (встроенные и заданные переменные) с контекстом макрообработки.
Если шаблоны столь всемогущи, то возникает вполне законный вопрос: зачем понадобилось изобретать специальный язык программирования, когда все можно сделать на том же C++? Дело в том, что при подобном акценте на программные шаблоны универсальный язык программирования, не обладающий специальными высокоуровневыми языковыми средствами, ничем не лучше обычного ассемблера (тем более, что фирма TopSpeed откровенно подчеркивает свою ориентацию именно на платформу Wintel). Вот почему язык Clarion в дополнение к традиционным средствам обычных языков добавляет некие новые возможности, обеспечивает компактность представления и надежность статического контроля ошибок еще на этапе компиляции. Наиболее важными среди них являются средства обработки событий, ненаследуемые классы (WINDOW, FILE, VIEW, QUEUE, REPORT и др.), которые как бы являются дальнейшим уточнением процедурных шаблонов, а также средства для процедурной работы с файлами баз данных, являющиеся надстройкой над ODBC/SQL-уровнем коммерческих СУБД. Еще один немаловажный момент состоит в том, что какими бы изощренными ни были сделаны шаблоны, в любой момент может появиться потребность слегка их подправить. Вот почему в шаблонах Clarion активно используются для этой цели программные вставки (embeds). Так что, чем компактнее и понятнее запись кода, тем проще будет сопровождать весь проект.
Архитектура работы с файлами БД
Работа с реляционными таблицами, хранящимися в файлах БД, является одним из самых сильных мест системы Clarion. Схема БД (структура и взаимосвязь таблиц) хранится в специальном словаре данных. Словарь данных определяет первый уровень абстракции.
Вторым уровнем является язык шаблонов (и прежде всего встроенные переменные, обеспечивающие интерфейс со словарем). На этом уровне в соответствии со словарем формируется логика связей с учетом отношений, ограничений ссылочной целостности, диапазонов представления значений и т.п. (все то, что ныне называется модным термином "бизнес-правила").
Третий уровень абстракции, на который производится отображение первых двух, - это язык определения данных, являющийся неотъемлемой частью языка Clarion. Помимо реляционных таблиц (FILE), на нем описываются и вспомогательные структуры QUEUE (список записей, хранящийся в оперативной памяти) и VIEW (виртуальная таблица).
Четвертый уровень абстракции - это язык манипулирования данными, также неразрывно связанный с языком Clarion. Для него характерны операторы файлового доступа (OPEN, CREATE, PACK, STREAM, FLUSH, REMOVE, RENAME), операторы модификации данных (ADD, APPEND, DELETE, PUT), операторы блокировки доступа (LOCK, UNLOCK, HOLD, RELEASE), операторы позиционирования (SET, NEXT, PREVIOUS, SKIP, GET), операторы поддержки транзакций (COMMIT, LOGOUT, ROLLBACK), а также вспомогательные операторы (POSITION, POINTER, RECORDS, EOF, SEND).
Пятый уровень абстракции - это уровень внутренней унификации работы с таблицами разных СУБД (механизм замещаемых драйверов БД). Именно здесь проходит "водораздел" между стандартной и профессиональной редакцией среды Clarion (в поставке стандартной версии обеспечивается работа только с драйверами форматов CLARION и TOPSPEED). Форма физического представления реляционных таблиц (и специфика работы с ними) должна оказывать минимальное воздействие на разработку информационных приложений. Вот почему разработчики Clarion реализовали этот механизм еще в версии Clarion Database Developer 3.0 (для DOS), созданной около 6 лет назад. Суть его состоит в том, что вся работа ведется через абстрактное понятие таблицы (файла). Конкретизация же физического представления осуществляется в атрибуте DRIVER структуры FILE. Для перехода на работу с другим представлением часто достаточно просто сменить символьную строку в атрибуте DRIVER, отвечающую за подключение соответствующей DLL-библиотеки. Понятно, что простого переключения может оказаться недостаточно, поэтому специфика работы с различным физическим представлением таблиц в технологии Clarion осуществляется за счет поддержания многообразия типов данных (в системе типов языка Clarion представлены практически все возможные типы, которые могут встретиться в таблицах других СУБД), и за счет оптимизации доступа (настройки параметров конкретного драйвера). При переносе Clarion в среду Windows к драйверам Btrieve, FoxPro, Clipper, dBase3, dBase4, DOS, ASCII и BASIC добавились драйвер ODBC и прямые SQL-драйверы для промышленных СУБД.
Шестой уровень абстракции - уровень внешней унификации работы с таблицами разных СУБД, который опирается на ставшую стандартом де-факто для платформы Wintel спецификацию ODBC (Open DataBase Connectivity). Работа в рамках ODBC строится по трехзвенной цепочке: первичный (front-end) ODBC-драйвер со стороны языка Clarion, стандартный менеджер ODBC (как связующий элемент) и вторичный (back-end) ODBC-драйвер, обеспечивающий доступ к источнику данных в формате конкретной СУБД. Понятно, что такое количество промежуточных слоев, да еще реализованных разными фирмами, может сказаться на функциональности интерфейса (типы данных, возврат результатов запросов, нюансы совместимости) и, что особенно важно, на производительности. Что касается последних сомнений, то быстродействие нынешнего поколения многих ODBC-средств таково, что для той же системы Clarion падение производительности по сравнению с прямыми SQL-драйверами составляет всего лишь около 15-20%.
Таким образом, мы вплотную подошли к седьмому уровню абстракции работы с базами данных в технологии Clarion, а именно, к уровню SQL-драйверов. Именно он и позволяет обеспечить достаточно полноценную работу в архитектуре клиент/сервер, вне зависимости от того, какой моделью доступа к удаленным данным вы пользуетесь (RDA, DBS или AS). В случае RDA-модели (Remote Data Access) логика обработки практически целиком исполняется на клиентской части. И именно эта модель достаточно легко может быть реализована при интеграции Clarion-приложения (как клиентской части) с сервером баз данных. Однако этому уровню в наибольшей степени подходит использование ODBC, а не SQL. В случае DBS-модели (DataBase Server) большая часть логики обработки перекочевывает с клиента на сервер. Здесь уже требуется активно задействовать механизмы хранимых процедур и триггеров БД. Для этого случая больше подходит использование прямых SQL-драйверов. Здесь уже можно задействовать специфику того или иного SQL-сервера (SQL-хинты, script-файлы и т.п.). Эффективность взаимодействия с SQL-сервером из Clarion-приложения можно повысить за счет использования механизма свойств (property), встроенного в язык Clarion для доступа к методам ненаследуемых классов. В случае же AS-модели (Application Server) между клиентом и сервером данных появляется третье, промежуточное звено, задача которого разгрузить сервер данных, почти полностью убрав с него логику. Реализация AS-модели взаимодействия с помощью Clarion также возможна, но является наименее проработанной. Как известно, центральную роль в этой модели играют мониторы обработки транзакций, а штатных решений стыковки с ними ни на уровне шаблонов, ни на уровне API-интерфейсов система Clarion пока не предоставляет.
Необходимость учета специфики работы с SQL-серверами позволяет в полную силу задействовать возможности механизма шаблонов. Ведь именно вариативное программирование, которое в Clarion может быть реализовано на более высоком уровне абстракции, нежели простая и привычная условная компиляция, позволяет эффективно решить задачу объединения общего с частным. Чисто технологически это открывает и путь для более четкого разделения труда в командах разработчиков: теперь результаты работы специалистов по организации интерфейса с SQL-серверами могут быть представлены в формальном виде, пригодном для непосредственного использования разработчиками другой специализации. SQL-шаблоны Энди Степлтона в этом смысле - хороший опыт, который стоит взять на вооружение.
По материалам журнала "КомпьютерПресс", еженедельника "ComputerWeek" подготовил Максим Костюченко
Компьютерная газета. Статья была опубликована в номере 15 за 1999 год в рубрике программирование :: разное