Читаем Дефрагментация мозга. Софтостроение изнутри полностью

Модель в виде XML-файлов поступает на вход «заклинателю» – входящей в состав пакета консольной утилите. Производятся проверки непротиворечивости модели, выдающие ошибки либо предупреждения разной степени важности. Во время анализа модель также преобразуется во внутренний формат в виде множества объектов с открытыми интерфейсами доступа.

Если модель корректна, «заклинатель» начинает призывать «джиннов» сделать свою работу, передавая каждому на вход кроме самой модели ещё и разнообразные параметры, конфигурацию, касающуюся не только самих джиннов, но и, например, таких настроек, как правила именования в конкретном слое системы.

Обработав модель в соответствии с конфигурацией проекта, джинн выдаёт готовый к компиляции в среде разработки код. Для слоя хранения данных кроме генерации специфичных для СУБД SQL-скриптов производится их прогон на заданном сервере разработки.

В случаях, когда система уже существует и подлежит, например, переделке, можно восстановить модель из схемы базы данных. Конечно, даже теоретически такое восстановление не может быть полным из-за разницы в семантике, но большую часть рутинной работы оно выполняет. Проведя один раз импорт, далее мы редактируем, структурируем модели и продолжаем работать только в обычном цикле изменений «через модель».

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

Пример модели в Genie Lamp

name ="TEntityId" baseType ="int" />

name ="Granularity">

name ="Day" value ="0">

name ="Month" value ="1" default ="true">

name ="Year" value ="2">

name ="FiscalYear">

name ="Id" type ="TEntityId" primaryid ="true" autoincrement ="true" />

name ="Name" type ="TCaption" uniqueid ="true">

name ="Granularity" type ="Granularity">

name ="FromDate" type ="date">

name ="ToDate" type ="date">

name ="Closed" type ="boolean" default ="false">

name ="GranularityName" type ="string" persisted ="false">

lang ="ru">Возвращает локализованое название грануляции

name ="CreatePeriods" access ="public">

lang ="ru">

Создает периоды финансового года

между датами начала и окончания

в соответствии с грануляцией. Например, для фин. года,

совпадающего с календарным, и помесячной грануляцией

будут созданы 12 месячных периодов

type ="void"/>

name ="FindPeriodIdByDate" access ="public">

lang ="ru">

Возвращает ID периода по заданной дате, "0" если не найден

name ="periodDate" type ="datetime"/>

type ="TEntityId"/>

name ="DeleteCascade" access ="public">

type ="void"/>

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже