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

на главную

Жанры

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

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

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

Толян и его команда

Иванов Дмитрий
6. Девяностые
Фантастика:
попаданцы
альтернативная история
7.17
рейтинг книги
Толян и его команда

Сердце дракона. Том 18. Часть 2

Клеванский Кирилл Сергеевич
18. Сердце дракона
Фантастика:
героическая фантастика
боевая фантастика
6.40
рейтинг книги
Сердце дракона. Том 18. Часть 2

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Машенька и опер Медведев

Рам Янка
1. Накосячившие опера
Любовные романы:
современные любовные романы
6.40
рейтинг книги
Машенька и опер Медведев

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

По дороге пряностей

Распопов Дмитрий Викторович
2. Венецианский купец
Фантастика:
фэнтези
героическая фантастика
альтернативная история
5.50
рейтинг книги
По дороге пряностей

Мама из другого мира. Делу - время, забавам - час

Рыжая Ехидна
2. Королевский приют имени графа Тадеуса Оберона
Фантастика:
фэнтези
8.83
рейтинг книги
Мама из другого мира. Делу - время, забавам - час

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан

Идеальный мир для Социопата 13

Сапфир Олег
13. Социопат
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Идеальный мир для Социопата 13

Утопающий во лжи 4

Жуковский Лев
4. Утопающий во лжи
Фантастика:
фэнтези
боевая фантастика
рпг
5.00
рейтинг книги
Утопающий во лжи 4

Сила рода. Том 1 и Том 2

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

Лорд Системы 7

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