18 дек. 2007 г.

PasDoc, ROBODoc, DocBook. Документирование кода в Delphi

Некоторое время назад передо мной стоял выбор средства документирования исходных текстов на Dephi.

Документировать код во внешних файлах весьма трудоемкая задача. Вопрос синхронизации кода и документации весьма важен и потому средства типа MS Word, OpenOffice.org и даже Help & Manual не подходят однозначно.

Программисты Java имеют хорошую утилиту javadoc, позволяющую генерировать документацию прямо по вставленным в код комментариям особого формата. Существует такой аналог и для Delphi: pasdoc


ROBOdoc - еще одна подобная утилита, но этот вариант я отбросил сразу из-за неоправданно усложненного синтаксиса и слишком большей расхожести с javadoc. Да и общая ориентация утилиты несколько отталкивала. Немаловажным фактором являлось и то, что языком написания был C, а значит могли быть трудности с пониманием работы и исправлением ошибок.

Pasdoc – это OpenSource программное обеспечение распространяемое под GNU Public license. Тоесть вы можете делать с программой и кодом все, что угодно, кроме присвоения авторских прав ;-)

Долгое время pasdoc'у вменяли в вину то, что он не способен генерировать формат DocBook. Собственно DocBook не являться конечным форматом документации и в чистом виде не используется.
DocBooc - SGML или XML (проще говоря — популярный набор тегов), предназначенное для разметки документов, такое же, как HTML для разметки веб-документов. (C) Wikipedia
DocBook – интересен тем, что позволяет вести единый файл документации и получать документы или их части в различных форматах: html, pdf, WinHelp, CHM.
На самом деле, это неправда. Вернее, полуправда :-) Написание документации в этом формате занятие весьма утомительное без специальных средств предоставляющих сервис: форматирования исходного кода, проверки синтаксиса, проверки правописания и тому подобного.

«В чем сила, брат ...?» (С) Брат 2. ... «А сила она в XML...» (C) ХЗ
Сила DocBook'а в XSL схемах которые поддерживаться сообществом и являться инструкциями для процессоров преобразующих XML файл в другой тестовый файл.

Судите сами.
HTML: DocBook > XSL схема > процессор > HTML
WinHelp: DocBook > XSL схема > процессор > файлы проекта для MS HelpWorckshop> MS HelpWorckshop компилятор>HLP
PDF: DocBook > XSL схема > процессор > XSL-FO>Форматировщик (Apache FOP, XEP etc.)>PDF

Ключевым звеном являются набор схем, которые только подготавливают необходимые входные файлы. Тоесть, теоретически можно написать схему которая бы на выходе дала исходные коды приложения на Dephi и сразу же скомпилировать утилиту показывающую справку как приложение %-)

Почему я решил написать статью.
PasDoc объявил о поддержке формата SimpleXML!
Для «тех кто в танке», прошу прощения, поясню. На выходе утилита выдаст структурированный XML вашего кода. А теперь вернемся на пару строк вверх и в схему вместо DocBook поставим SimpleXML. Что получим ? Ну практически ничего, потому как DocBook XSLStylesheet ничего не знают о SimpleXML.
Поскольку я математик, то вспоминается:
Физику и математику ставится задача: написать алгоритм кипячения воды в чайнике на газовой плите.
Ответ одинаковый у обоих: Налить воду, зажечь огонь, поставить на него чайник и ждать.
Теперь усложним задачу: в чайнике уже есть вода.
Физик: зажечь огонь, поставить на него чайник и ждать.
Математик: вылить воду, задача сводиться к предыдущей.

Получаем: SimpleXML>XSL-SimpleXML2DocBook> Processor>DocBook –> а для DocBook задача у на уже решена.
Упреждая вопросы: почему не pasdoc > DocBook, отвечаю, что не DocBook это довольно мощная и развитая система и не всякому проекту подходит по масштабам. Потому гораздо эффективней иметь «сырой» XML и уже из него получать форматирование DocBook.

Существует и второй метод решения задачи. SimpleXML2>XSLMyStyleSheet>...
Создать собственные схемы преобразования. Может быть и трудоемко, но получим возможность конвертировать прямо в формат внутреннего Wiki например.
IMHO написать свои схемы проще чем изучить теги DocBook.

Для тех, кто все таки дочитал до этой строки скажу, что SimpleXML не доступен в версии 0.10.0 и необходимо взять сборку с SVN. SimpleXML еще не совсем доработан. Для простоты показа примеров выкладываю скомпилированную мною версию и включаю ее в архив.

Архив содержит пример преобразования извлеченного из pas файла xml в html. Используется java-based процессор Saxon и Apache Ant. Потому приодеться установить Java.
Можно поспорить в выборе процессора. Существует XSLProc, он чуть быстрее, но и слабее потому, что не поддерживает XSL 2.0

Почему я выбрал Saxon, потому, что он пока единственный, кто поддерживает XSL 2.0, хотя я могу и ошибаться. К тому же он прекрасно интегрируется c Ant, а почему я выбираю Ant читайте тут(ссылка на статью в блоге).

Призываю энтузиастов владеющих XSL присоединяться разработке схем для других форматов :-)

З.Ы. Фактически pasdoc может выбросить все форматы и оставить только xml %-) Тоесть оставить только функции извлечения данных из исходных текстов Delphi.
Задача трансформации в другие форматы у нас уже решена ... :-)

З.Ы. З.Ы Будучи на разработчиком Delphi CodeGear (Borland) я бы не изобретал системы справки, а просто внедрил pasdoc и генерировал бы справку на лету в отдельном окне прямо в IDE как это реализовано в Lazarus.

Ссылки:
Пример к статье

http://pasdoc.sipsolutions.net/
http://www.xs4all.nl/~rfsber/Robo/robodoc.html
http://docbook.sourceforge.net/
Автодокументация исходников посредством PasDoc

Copyright 2007 Roman V. Babenko http://romanvbabenko.blogspot.com, http://devrona.com

16 дек. 2007 г.

Delphi мертв, а я еще нет... XML медлит ...

Забрел давеча на http://SQL.ru
Захотелось освежить восприятие мира. Точнее понять, чем живет мир Delphi. Чем интересуется. О чем спрашивают, как отвечают.
Внимание привлек почти романтический пост: XML медлит ...

fashtura: XML медленно загружается, как исправить ...
softwarer: Попросить его поторопиться ...

RENaissance: дать пинка
...
eNose: загружается или парсится?
sqllex: Размер файла?
eNose: и куда вы его "загружаете"?
fashtura: Загружаю в Grid а размер 20 Мб
eNose: XML в Grid? напрямую или всё-таки как?
eNose: напрямую
Страдалецъ: Если вы его напрямую грузите, тогда пофик XML или MDB, это просто абстрактный файл. А вот если вы его обрабатываете именно как XML(парсите), то тады другое дело - скорость и 20-Мб XML понятия несовместные и в этом случае надо разбираться подробнее, что вы называете "медленно". Скока это? Насколько много вложенностей в XML?
fashtura: примерно 30 сек.
Страдалецъ: А тот-же файл, но открытый уже эксплорером сколько по времени занимает? Только дождитесь конца загрузки.
Ну а 30 сек, если вложенность скажем уровня 3, то это еще ничего.

Причем количество постов у каждого из учасников от 20 до 21000

Внутренности оказались еще шикарней.
Оказывается есть люди, которые задают подобные посты, есть те которые над ними издеваються, а есть и те кто пытаются ответить.

Вот спросите себя, зачем нужен htpp://bash.org.ru, если на серьозных тематических форумах можна изыскать подобные перлы. Прочитайте пару десятков постов и отметьте для себя на сколько из них вы бы хотели ответить.

"Я так думаю ..." (С) Мимино. Умер не Delphi а радужная мечта о безоблачной и уважаемой професии программиста. Бизнес требует все больше и больше. А мы не останавливаемся для того чтобы прочесть пару тройку книг по: ООП, теории построения баз данных, MVC. И куда уж там шаблонам ропектирования.

Вот и имеем теперь тонны неефективного кода, вовлеченного в бизнеспроцесс. И плохое умирающее средство разработки, да еще и тормозные серверы БД.

А может просто руки выпрямить ? Или с лозунгом Delphi - отстой, C# - нам поможет ломонуться писать еще лет пять, авось новое, что-то придумают и мы туда же отправим нынешние техноогии и средства разработки...

14 дек. 2007 г.

Линки. ООП и патерны

Несколько ссылок по ООП и шаблонам проектирования. Предпочтительно в Delphi.
Практика применения паттернов проектирования

Использование паттерна “Команда”

Статьи старые но занимаетельные. Жалко, что как всегда примеры урезанные.
Ну жалко, что ли написать сприложение которое бы не оставляло вопросов по используванию техники? Если уже по базам данных, то как минимум: список, диалог редатирования, выборка из справочника. Иначе просто нет целосности картины.

Следующая ссылки бессовестно уперта из поста

Объектно-ориентированное программирование в действии, Т. Бадд

11 дек. 2007 г.

Кадеты. Теорема: Мир конЕчен.

«Болота иногда издают странные звуки...»(С) А. Конан Дойль
У меня складывается впечатление, что мир все таки не бесконечен и имеют место повторы. Вчерашняя серия кадетов: выпускной экзамен, парень романтичный и желающий писать выпускное сочинение в стихотворной форме... События 13летней давности экранизированы только сегодня ... а ведь я действительно писал на экзамене стих на военную тему и у меня все получилось. А поскольку авторских прав у меня не спрашивали, значит еще где-то мир сделал петлю. Теорема почти доказана, но не радует: ледниковый период, у числа PI появиться период, Наполеон, фашизм-коммунизм, Екатерина II ...

Джоел Спольски, Сет Годин и компания ... Really ?

Получилось довольно эмоционально...
Существует ряд книг которых бы я никогда не купил. Не потому что они мне не интересны, а просто потому, что прочитав их один раз я бы никогда не взял их в руки повторно. Обычно книги перечитывают потому, что они содержат интересную справочную информацию или же эффект от их прочтение способен эволюционировать в процессе взросления читателя.

Но существуют книги-пустышки, подобные газете – один раз прочитал и можно смело выбросить. Они написаны либо на заказ, либо просто для заработка денег, либо просто для накопления печатно-издательской массы у автора . Попросту говоря, дешевая беллетристика. Один раз прочитал, или даже начав читать ты уже знаешь концовку. Причем такая тенденция наблюдается не только в среде печатного слова, но и в кинематографе. Спросите себя, сколько раз вы готовы пересматривать «Иронию судьбы», «Москва слезам не верит», «Асса», «Игла» и сколько раз вы снимите с полки диск с «Гарри Поттером» или «Кодом ДаВинчи».
Почему-то мне кажется, что так называемое «продолжение» «Иронии...» постигнет участь двух последних кинопроизведений... Хотя там и задействованы глубокоуважаемые и горячо любимые актеры: Хабенский, Мягков ... Удивляет то, что я пересматривал «Дозоры», но уж больно эффектно фильм снят – сплошной клип, да и актерский состав довольно весом...
«Но, в прочем песня не о нем...»
А песТня собственно говоря о книгах-пустышках для программистов. Потому как волею судеб я, хочу надеяться, являюсь не самым худшим экземпляром этого замечательного и сравнительно молодого народа.

Как водиться каждого народа должны быть вожди. Вождями становятся по разным причинам боевые заслуги, опыт или... же остаточный принцип. Как это остаточный? Да у нашего народа такое бывает. Это когда из твоего племени сбежали или гордо удалились все кому не нравился нынешний вождь, а ты почему-то задержался. Поздравляю. Теперь тЫ вождь! Хотя не исключено, что и до этого им был тоже тЫ... пора набирать новое племя. А как же воевать то надо... с кем-то, за кого-то, за что-то... а... неважно. Питаться надо.
А как же править и принимать умные решения? Опыта маловато. Да и молод ешшо. Где бы знаний по-быстрому набраться? Ответ - из книг. Ответ, то он правильный в принципе, да только книги толстые у заумные, пока прочтешь висок седым станет. Нам что-нить побыстрей да покороче и чтобы еххххх... аж дух захватывало...

Да пожалуйста. Могу посоветовать аж два для вождей-скороспелок: (Сет Годин) Getting Real или же Джоел Спольски(читайте все что попадется).
Первого характеризуют как успешного и плодовитого маркетолога второй написал шуточный тест «12 шагов к лучшему коду».
Я не иронизирую по поводу «шуточного» теста можете убедиться сами тут http://russian.joelonsoftware.com/Articles/TheJoelTest.html

Я предлагаю вам свой собственный, совершенно безответственный и несерьёзный тест для определения качества команды разработчиков. Главное его преимущество в том, что он отнимет у вас от силы три минуты.(С) Джоел Спольски

К сожалению у тех, кто воспринял его всерьез на откат может уйти целая жизнь. Так, что луче было бы получить медицинское образования или пойти по ссылке указанной вначале статьи. Кстати если вы все же решили следовать стопам сенсея Джоела, учтите, что пункт 8 может стать вашим краеугольным камнем, если не Тунгусским метеоризмом(не очепятка, просто игра слов).

Сет Годин – успешный маркетолог, мастер компьютерных наук и философии.
Книга Getting Real http://gettingreal.37signals.com/GR_rus.php уже девятая в его портфолио.
Написана в типично американском стиле: методично-многократное повторение одного и того же материала, много пересказов о том как у кого-то, что-то однажды хорошо вышло. Если выбросить «свидетельские показания» и повторения то получиться вполне безобидная брошюра: как заработать на гербалайфе.
Книга затрагивает все аспекты разработки: даже код и спецификации. В общем то я не сомневаюсь в талантах Сета Година как маркетолога, но вот код и спецификации, и его советы вызывают как минимум сомнение.
В общем перед тем как читать книгу или брошюру не мешало бы изучить биографию автора и сравнить ее адекватность раскрываемой в книге теме.
Забавный случал со мной наблюдал на одной из лекций в компании по продаже пищевых добавок(грешен, но не каюсь ибо опыт бесценен).

Слушатель: скажите пожалуйста, тестировался ли ваш продукт применительно к рациону питания населения Украины. Не секрет что русскому-хороше, то немцу смерть.
... слушателя вывели из зала ...

Де исключаю, что подобная реакция может последовать и на мое вольнодумство, тем более, что в круге друзей, я нашел целое общество читателей Get Real :-) Но покажите мне человека разбогатевшего на гербалайфе...
Бойтесь землян дары, приносящих! (Фредерик Браун) Это хороший рассказ :-)

Delphi. Автоматизация сборки проектов.

Что мы имеем на борту IDE Delphi из подобных средств? Практически ничего. Make – годиться разве, что для автоматизации компиляции проекта и ресурсных файлов. Ни о какой масштабируемости и расширяемости речь не идет. Немного разбавляют краски bat и cmd файлы и запуск внешних утилит командной строки. Скудность возможностей интерпретатора Windows по сравнению с Linux Bash, CSH тоже оставляет причины загрустить. Да и сам подход не решает основной проблемы, описанной выше: не дает ответа о выполнении поставленной задачи. Анализ логов работы скриптов в расчет не брать, потому как это лишняя работа, не позволяющая быть основанием для продолжение выполнения зависимых задач.

На http://sourceforge.net был основан проект названный WANT. Разработанный на Delphi клон Ant заточенный под сборку проектов Borland Delphi IDE. На http://DelphiPlus.org даже есть статья по использованию WANT и я сам пытался составить документацию, но ввиду незаконченности проекта оставил попытки.
Непонятна цель проекта WANT. Написать аналог Jakarta Ant отвязанного от Java и привязанного к платформе Windows? Построить ошибки уже написанного и оттестированного продукта? Думаю в этом основная причина отсутствия интереса общественности к развитию этого проекта. Хотя кстати сказать сам Ant уже имеет продвинутого конкурента в виде Maven.
В процессе работы над документацией WANT, мой коллега(Привет, Коля ;-)) просил меня о том: стоит ли использовать WANT или лучше оригинальный Ant. В тот момент я не придал значения такой альтернативе, так как для настоящего «дельфера» для меня Java было чем-то, что было «непригодным для настольных приложений и жутко сложно-тормозным». Но время шло, Java становилась ближе и доступней, а такого средства как Ant в Delphi так и не появилось ....

Delphi. Автоматизация сборки проектов Apache Jakarta Ant

Что такое Ant ?
Это написанное на Java средство автоматизации сборки программных проектов, подобное известной утилите «make», но избавленное ее недостатков и ограничений. Поскольку Ant написан на чистом Java, то отсюда вытекаят явная выгода его кросплатформности, тоесть независимости от операционной системы. Как большинство программы написанных на Java под эгидой Apache Foundation – Jakarta Ant является OpenSource ПО, следовательно вам не придется как минимум платить за лицензию, а как максимум вы имеете в распоряжении исходный код.

Возможности

  • Работа с файлами и каталогами(копирование, перемещение, удаление);
  • Работа с архивами(zip/bzip2);
  • Запуск внешних приложений;
  • Интеграция с системами контроля версий CVS, Subversion, SouceSafe, Perforce;
  • Чтение из файла и подстановки переменных;
  • Работа по HTTP и FTP протоколам;
  • Показ заставки в процессе выполнения цели(декоративная функция);
  • Поддержка мультиязычности в сообщениях интерфейса;
  • Масштабируемость, возможность создания собственных заданий;
  • Интерфейс командной строки и гибкая система файлов настроек;
  • Кросплатформенность;
  • Система логирования;
  • Работа с электронной почтой;
  • Возможность вызова заданий находящихся во внешних ant-файлах;
  • Связывание отдельных задач в цепочки зависимостей и получения однозначного ответа о выполнении;


Идеология:
Существует файл проекта в котором с помощью xml описаны цели [target]. Цели состоят из задач [task]. Результат выполнения цели зависит от результата выполнения задач из которых состоит цель. Цели могут объединяться в более крупные цели с помощью зависимостей [depends]. Результат таких составных целей зависит от выполнения всех составляющих цепочки. [Properties] определяют глобальные переменные проекта, такие как название, номер релиза, текущий каталог и т.д. Существуют еще условия [condition], но их использование не обязательно.

Поясню зачем я это излагаю.
«Написанный НА Java» - не эквивалентно «написанный ДЛЯ Java», верней «ТОЛЬКО для Java».
Теоретически мы можем использовать его для автоматизации практически любого процесса в системе.
Логика работы Ant такова, что на выходе мы 100% получить ответ: «Таки, ДА, достигли мы намеченной цели, или, таки, НЕТ».

Ревизия средств сборки проектов встроенных в Delphi.

Технические требования и установка
Sun JDK – установку рассказывать не буду их полно в интернете да и на сайте довольно доходчиво написано. Правда на английском, но если вы хотите программировать, то должны хотя-бы читать, иначе ваш удел строгать бухгалтерию в 1С.

Скачать дистрибутив с сайта и скопировать в каталог: d:\usr\local\ant
В файле autoexec.bat

SET JAVA_HOME=d:\usr\java\jdk1.6.0_03
SET JRE_HOME=d:\usr\java\jdk1.6.0_03\jre
SET PATH=%PATH%;%JAVA_HOME%\bin;d:\usr\local\ant\bin
SET CLASSPATH=%CLASSPATH%;d:\usr\local\ant\lib

тоесть поместить путь к каталогу ant\bin в переменную PATH и указать Java где ей искать библиотеки Ant В переменной CLASSPATH

Перегрузив систему набираем в консоли:
D:\>ant
Buildfile: build.xml does not exist!
Build failed

Все хорошо!!! Ant говорит, что не нашел build-файла, но все таки работает и значит мы все сделали правильно.

Следующий этап создание тестового проекта
Для написания файла проекта нам понадобиться текстовый редактор.
Внимание!!! Если вы планируете писать комментарии на русском языке, то вам понадобиться редактор с поддержкой Unicode. Подойдет например Notepad2, который имеет также встроенную поддержку раскраски xml синтаксиса. Для проектов повышенной степени сложности могу рекомендовать редактор Ant скриптов Eclipse IDE. Редактор поддерживает не только раскраску, но и проверку синтаксиса, дополнение кода, подсказки, средства запуска, так как Ant является штатным средством сборки проектов Eclipse.

Создадим тестовый проект и дадим ему очень «оригинальное» название HelloWorld.dpr.
Поставим себе за цель автоматизировать следующие рутинные операции:
формирование рабочего каталога проекта(configure);
компиляция проекта(compile);
создание билда проекта с автоинкрементальным счетчиком версии и внесением изменений в документацию(build);
очистка проекта от временных файлов(clean);
очистка каталога от необязательных каталогов и файлов(проще говоря, остаются только каталог исходных текстов, потому как бинарные данные и документация генерируются из них и не являются обязательной частью проекта)(purge);
архивация только исходных текстов программы с предварительной очисткой(distr.src);
подготовка архива билда программы, включая исходные тексты(distr.all);
диагностика скрипта с выдачей переменных окружения и текущих настоек(diagnostics);

Выбросил текст проекта. Некогда колдовать над вставкой тегов. Читайте в Архиве.

В общем-то на этом и все, как ни странно. Полный скрипт с подробными комментариями и проектом можно посмотреть в архиве. Целью данной статьи не являться обучение работы с Apache Jakarta Ant. Я хочу лишь обратить внимание аудитории на мощное, хорошо себя зарекомендовавшее и, что немаловажно, свободное средство с открытым кодом, способное существенно облегчить вам жизнь и труд.
При этом возможности не ограничиваются только функциями сборки проекта. Работа по протоколам FTP, HTTP может стать основой автоматической системы обновления, или инструментальным средством репликации. Возможно применение как корпоративного средства развертывания приложения, проще говоря, инсталятора и системы обновления внутри компании. Настраиваемой системы архивации. Выполнение SQL скриптов через JDBC также может существенно пригодится для разработки сервисных утилит обслуживания БД.
В общем не спешите разрабатывать велосипед, возможно он уже есть и давно ездит и нужно только подогнать его под ваш рост и вес ... цель же не разработать ... а просто доехать в пункт назначения.

Проект к статье:
helloworld_win32-build-11.zip


P.S. Архив не спрашивайте - утерян вместе с хостингом.

3 дек. 2007 г.

UIB+FastReport+Firebird

UIB2 для FastReport 3.x
Интеграция хорошего отчетера с хорошими компонентами доступа с хорошей базе данных.
Особенностью являеться поддержка мастер/детальных отчетов с помощью FBDataSet Алекса Лагунова, так как оригинальный датсет UIB не поддерживает такой функции.
Проверялось на UIB-2.1, FastReport-3.25, Firebird-1.5 Delphi-7
Вполене вероятно будет работать на FR4.

2 дек. 2007 г.

Firebird. Зоопарк доменов.

Хочется обратить внимание аудитории на использование доменов и их размерностей при написании баз данных под управлением СУРБД Firebird. Я думаю это в равной степени применимо и к другим серверам баз данных имеющим поддержку доменов.
Рассматривая DDL хранилищ разработанных другими девелоперами, мне всегда интересно сколько доменов использовано в БД и с какой целью. На основе этих наблюдений сложилось несколько моделей разработки, но ни одна из них не представляется мне концептуально законченной или же осознанно использованной.

Рассмотрим несколько стратегий принимающих участие в эволюции «зоопарка доменов»:
- каждое поле отдается под управление домена;
- создаться несколько подвидов доменов одного типа с различной размерностью(VAR64, VAR3, VAR255);
- домены создаться по типу поля, в который входит частично его название или супертип (TDESCRIPTION, D_NAME, DMONEY);
- только часть полей имеет домен часть;
использование доменов беспорядочно и хаотично, существуют поля у которых домен не указан;
- в доменах используются всевозможные экзотические типа : (NUMERIC, SMALLINT, CHAR);

Ка видно из этих тезисов можно выделить три основных характеристики управления доменами: именование, размерность, обязательность.
Отсутствие систематичность именования доменов может быть следствием разности подходов разработчиков, сопровождавших систему. В некоторых случаях разработчик просто не придает значения читабельности своего кода, так как работает над ним исключительно сам.

Что касаться размерности, то основной причиной для использования являться попытка «оптимизировать» хранение данных и «сэкономить» расход памяти. Такой подход может и был оправдан во времена когда компьютеры были большими, а объемы памяти маленькими. Но в нынешней реальности все изменилось с точностью до наоборот и нет особого смысла задумываться какого размера должно быть поле. В равной степени это относиться и к типу хранимых данных.

Контроль за корректностью размера вводимых данных, на мой взгляд, так же не является аргументом. Пример: МФО банка 6 цифр. Гораздо гибче является механизм следящих триггеров, нежели правка клиентского приложения в случае увеличения размера поля. Проще поменять триггер прозрачно для всех учасников процесса, чем изменить свойство Size у полей DataSet, созданных в режиме дизайна.

Сформируем основные правила:
- доменов минимально-досточное количество и ввод новых нежелателен, без крайней необходимости;
- каждое поле должно определиться с помощью домена;
домены именуются по правилам принятым в системе;
- для доменов отводятся типы имеющие максимальную емкость в своем диапазоне,
остальные типы не используются;
- строка длинной больше 255 символов – это текстовый BLOB;
- по возможности исключить неопределенность типа NULL в значении полей и задать значение «по-умолчанию»;
- контроль за корректностью данных производиться с помощью триггеров;

Домены именуются по правилу:
{T}{LOGICAL_DATATYPE}, где T префикс, обозначающий «тип»(ассоциация с нотацией классов Dephi), а LOGICAL_DATATYPE – название типа данных Firebird или логическое название типа данных.

Следующий скрипт определяет используемые пользовательские домены при разработке баз данных проекта:

/* <Домены> */

/**
Первичны ключ
*/
CREATE DOMAIN TPRIMARY AS
BIGINT
NOT NULL;

/**
Внешний ключ
*/
CREATE DOMAIN TFOREIGN AS
BIGINT
DEFAULT 0
NOT NULL;

/**
Целое число
*/
CREATE DOMAIN TINTEGER AS
BIGINT
DEFAULT 0
NOT NULL;

/**
Логическое значение
*/
CREATE DOMAIN TBOOLEAN AS
INTEGER
DEFAULT 0
NOT NULL
CHECK (VALUE BETWEEN 0 AND 1);

/**
Число с плавающей запятой
*/
CREATE DOMAIN TFLOAT AS
DOUBLE PRECISION
DEFAULT 0
NOT NULL;

/**
Дата
*/
CREATE DOMAIN TDATE AS
DATE;

/**
Время
*/
CREATE DOMAIN TTIME AS
TIME;

/**
Дата/Время
*/
CREATE DOMAIN TDATETIME AS
TIMESTAMP;

/**
Строки
*/
CREATE DOMAIN TSTRING AS
VARCHAR(255)
DEFAULT ''
NOT NULL;

/**
Большие текстовые и бинарные данные
*/

CREATE DOMAIN TBINARY AS
BLOB SUB_TYPE -1;

CREATE DOMAIN TTEXT AS
BLOB SUB_TYPE -2;

/* */

Поскольку Firebird не поддерживает логических полей то домен TBOOLEAN вводиться в случае использования библиотек, которые имитируют данный тип с помощью собственных типов полей набора данных(FIBPlus).

В некоторых случаях набор может быть расширен доменом для определения специфических типов данных.
Например GUID, TGRAPHIC или TXML. Суть этих доменов состоит в особенно способа обработки их на клиенте такими библиотеками как, например, Devrace FIBPlus. Технология локальных фильтров позволяет преобразовывать данные при записи/чтении. В этом случае BLOB SUB_TYPE должен быть отрицательным, так как положительные значение зарезервированы под системные нужды самой СУРБД.

Несколько замечание по поводу политики значений «по-умолчанию». Логика работы с NULL значениями довольно непроста. Порядок сравнения, сортировки, оптимизации и хранения и т .д. Причем она различается на разных серверах баз данных. Поэтому, чтобы отбросить добрую долю неопределенности и проблем с переносом между СУРБД и оптимизацией производительности, необходимо просто избавиться от NULL значений. Поэтому каждый
домен по возможности предопределяется как NOT NULL и задается DEFAULT значение.

Поля, основанные на доменах TDATE, TTIME, а также TDATETIME при необходимости
требуют инициализации в триггере: CURRENT_DATE, CURRENT_TIME и CURRENT_TIMESTAMP соответственно.

Для внешних ключей в каждой таблице заводиться запись со значением 0. Такой подход позволит избавиться от LEFT JOIN, который как известно довольно непроизводителен при выборках.

Если строковые значения не помещаются в размерность домена TSTRING, то в этом
случае делается поле на домене TTEXT (BLOB).

Итак: TPRIMARY, TFOREIGN, TINTEGER, TSTRING, TBOOLEAN, TDATE, TTIME, TDATETIME, TTEXT, TBINARY.

Вот и весь джентльменский набор доменов.