Чтение онлайн

на главную - закладки

Жанры

Дефрагментация мозга. Софтостроение изнутри
Шрифт:

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

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

<Enumeration name ="Granularity">

<Doc><Label lang ="ru">Грануляция учётного периода</Label></Doc>

<Item name ="Day" value ="0">

<Doc><Label lang ="ru">День</Label></Doc>

</Item>

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

<Doc><Label lang ="ru">Месяц</Label></Doc>

</Item>

<Item name ="Year" value ="2">

<Doc><Label lang ="ru">Год</Label></Doc>

</Item>

</Enumeration>

<Entity name ="FiscalYear">

<Doc><Label lang ="ru">Финансовый

год</Label></Doc>

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

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

<Doc><Label lang ="ru">Обозначение года</Label></Doc>

</Attribute>

<Attribute name ="Granularity" type ="Granularity">

<Doc><Label lang ="ru">Грануляция периодов</Label></Doc>

</Attribute>

<Attribute name ="FromDate" type ="date">

<Doc><Label lang ="ru">Дата начала</Label></Doc>

</Attribute>

<Attribute name ="ToDate" type ="date">

<Doc><Label lang ="ru">Дата окончания</Label></Doc>

</Attribute>

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

<Doc><Label lang ="ru">Год закрыт?</Label></Doc>

</Attribute>

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

<Doc>

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

</Doc>

</Attribute>

<Operation name ="CreatePeriods" access ="public">

<Doc>

<Text lang ="ru">

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

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

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

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

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

</Text>

</Doc>

<Returns type ="void"/>

</Operation>

<Operation name ="FindPeriodIdByDate" access ="public">

<Doc>

<Text lang ="ru">

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

</Text>

</Doc>

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

<Returns type ="TEntityId"/>

</Operation>

<Operation name ="DeleteCascade" access ="public">

<Returns type ="void"/>

</Operation>

</Entity>

<Entity name ="Period">

<Doc><Label lang ="ru">Учётный период</Label></Doc>

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

<UniqueId>

<Attribute name ="FiscalYearId" type ="TEntityId">

<Doc><Label lang ="ru">ID финансового года</Label></Doc>

</Attribute>

<Attribute name ="FromDate" type ="date">

<Doc><Label lang ="ru">Дата начала</Label></Doc>

</Attribute>

</UniqueId>

<UniqueId>

<OnAttribute name ="FiscalYearId"/>

<Attribute name ="PeriodNumber" type ="smallint">

<Doc><Label lang ="ru">Номер периода</Label></Doc>

</Attribute>

</UniqueId>

<Attribute name ="ToDate" type ="date">

<Doc><Label lang ="ru">Дата окончания</Label></Doc>

</Attribute>

</Entity>

<Relation entity ="Period" name ="FiscalYear"

entity2 ="FiscalYear" name2 ="Periods"

cardinality ="M:1">

<AttributeMatch attribute ="FiscalYearId" attribute2 ="Id" />

</Relation>

Теперь

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

• слои хранения будут развёрнуты на SQL Server или Oracle;

• слой домена под управлением NHibernate;

• слой веб-служб на базе ServiceStack (вместо WCF, имеющего под Mono/Linux ограничения).

Пример конфигурации проекта в Genie Lamp

<! – Включаем файл(ы) модели в проект – >

<ImportModel fileName ="MyModel.xml" />

<! – Будем использовать джинна SQL Server – >

<Genie name ="SqlServer"

type ="GenieLamp.Genies.SqlServer.SqlServerGenie"

assembly ="GenieLamp.Genies.SqlServer"

active ="false"

outDir ="%PROJECT_DIR%/../SQL/SqlServer-%TARGET_VERSION%"

outFileName ="%PROJECT_NAME%.sql"

updateDatabase ="true"

targetVersion ="2008">

<Param name ="Database.Create" value ="false" />

Другие параметры "заклинания"

</Genie>

<! – Будем использовать джинна Oracle – >

<Genie name ="OracleDb"

type ="GenieLamp.Genies.Oracle.OracleGenie"

assembly ="GenieLamp.Genies.Oracle"

active ="true"

outDir ="%PROJECT_DIR%/../SQL/Oracle-%TARGET_VERSION%"

outFileName ="%PROJECT_NAME%.sql"

outFileEncoding ="iso-8859-1"

updateDatabase ="false"

targetVersion ="10g">

<Param name ="UniqueIndexConstraint" value ="true" />

</Genie>

<! – Будем использовать джинна NHibernate для генерации домена – >

<Genie name ="NHibernate"

type ="GenieLamp.Genies.NHibernate.NHibernateGenie"

assembly ="GenieLamp.Genies.NHibernate"

active ="true"

outDir ="%PROJECT_DIR%/../Domain"

outFileName ="%PROJECT_NAME%.Domain.cs"

targetVersion ="*">

<Param name ="TargetAssemblyName" value ="Company.Business.%PROJECT_NAME%.

Domain" />

</Genie>

<! – Будем использовать первого джинна ServiceStack

для генерации интерфейсов к веб-службам – >

<Genie name ="ServiceStack Services Interfaces"

type ="GenieLamp.Genies.ServicesLayer.ServiceStack.ServicesInterfacesGenie"

assembly ="GenieLamp.Genies.ServicesLayer"

active ="true"

outDir ="%PROJECT_DIR%/../Services.Interfaces"

targetVersion

="*">

</Genie>

<! – Будем использовать второго джинна ServiceStack

для генерации собственно веб-служб – >

<Genie name ="ServiceStack Services"

type ="GenieLamp.Genies.ServicesLayer.ServiceStack.ServicesGenie"

assembly ="GenieLamp.Genies.ServicesLayer"

active ="true"

outDir ="%PROJECT_DIR%/../Services"

targetVersion ="*">

</Genie>

<Configuration>

<! – Конфигурация слоя хранения данных – >

<Layer name ="Persistence">

<NamingConvention style ="uppercase" maxLength ="30">

<Param name ="PrimaryKey.ColumnTemplate" value ="NI%TABLE%" />

<Param name ="PrimaryKey.ConstraintTemplate" value ="PK_%TABLE%" />

… Другие шаблоны именований

</NamingConvention>

<Param name ="ForeignKey.CreateIndex" value ="true" />

<Param name ="BooleanValues" value ="YesNo"/>

</Layer>

Поделиться:
Популярные книги

Адвокат вольного города

Парсиев Дмитрий
1. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Адвокат вольного города

Темный Лекарь 4

Токсик Саша
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 4

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Провинциал. Книга 2

Лопарев Игорь Викторович
2. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 2

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Сумеречный Стрелок 2

Карелин Сергей Витальевич
2. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 2

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

Лучший из худших

Дашко Дмитрий
1. Лучший из худших
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Лучший из худших