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

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

Жанры

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

Пример модели в 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>

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

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального

6 Секретов мисс Недотроги

Суббота Светлана
2. Мисс Недотрога
Любовные романы:
любовно-фантастические романы
эро литература
7.34
рейтинг книги
6 Секретов мисс Недотроги

Измена. Ты меня не найдешь

Леманн Анастасия
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Ты меня не найдешь

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

Вернуть невесту. Ловушка для попаданки

Ардова Алиса
1. Вернуть невесту
Любовные романы:
любовно-фантастические романы
8.49
рейтинг книги
Вернуть невесту. Ловушка для попаданки

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Избранное. Компиляция. Книги 1-11

Пулман Филип
Фантастика:
фэнтези
героическая фантастика
5.00
рейтинг книги
Избранное. Компиляция. Книги 1-11

Я сделаю это сама

Кальк Салма
1. Магический XVIII век
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Я сделаю это сама

"Фантастика 2025-1". Книги 1-30

Москаленко Юрий
Фантастика 2025. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Фантастика 2025-1. Книги 1-30

Бастард Императора. Том 6

Орлов Андрей Юрьевич
6. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 6

Локки 4 Потомок бога

Решетов Евгений Валерьевич
4. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 4 Потомок бога

Брачный сезон. Сирота

Свободина Виктория
Любовные романы:
любовно-фантастические романы
7.89
рейтинг книги
Брачный сезон. Сирота

Владыка морей ч.1

Чайка Дмитрий
10. Третий Рим
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Владыка морей ч.1