<p>Слой хранения (СУБД)</p>

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

Если посмотреть на созданные в СУБД структуры, то мы увидим, что из одной и той же модели логического уровня были созданы две реализации, различающиеся на физическом уровне. Например, используемые типы данных различаются. С другой стороны, необходимость поддержки слоем домена сразу двух СУБД приводит к тому, что вместо оптимального, но специфичного для SQL Server типа bit для поддержки булевых величин используется принятый в среде Oracle символьный тип.

Рис. 20. Результат работы джинна SQL Server

Рис. 21. Результат работы джинна Oracle

<p>Слой домена (NHibernate)</p>

Джинн NHibernate генерирует три C#-файла и один XML-файл проекции (маппинга) классов на структуры хранения.

Все классы домена являются расширяемыми (partial), что позволяет разработчику вынести специфичные не поддерживаемые моделью реализации свойств и методов классов в отдельные файлы.

Перечисляемый тип создаётся вместе с классами, позволяющими локализовать пользовательские названия его элементов, описанные в модели. По умолчанию будет использован язык модели, перевод необходимо осуществлять в технологии gettext.

Рис. 22. Перечисляемый тип слоя домена и его локализация

Рис. 23. Класс «Финансовый год» слоя домена

Для определяемых моделью сущностей генерируются классы, содержащие кроме соответствующих объявленным атрибутам свойств ещё и группу служебных методов для управления объектами, например, для сохранения или выборки по запросу на HQL или даже SQL. Такие методы часто используют служебные классы, объявленные в DomainSupport.cs.

Для объявленных в модели операций генерируется соответствующий метод интерфейса. Реализовать их нужно программисту в рамках расширения partial-класса.

Рис. 24. Класс «Учётный период» слоя домена

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

Фрагмент файла проекции для класса «Финансовый год»

name="Domain.Engine.FiscalYear" table="FISCAL_YEAR" schema="MYAPP">

name="Id" access="property" column="NIFISCAL_YEAR">

class="native">

name="sequence">MYAPP.SEQ_FISCAL_YEAR

name="Version" column="VERSION" type="int" access="property" />

name="Periods" table="MYAPP.PERIOD" inverse="true" lazy="true" cascade="none">

column="NI_FISCAL_YEAR" />

class="Domain.Engine.Period" />

name="EntityRegistry" class="Domain.Core.EntityRegistry" unique="true">

name="NI_ENTITY_REGISTRY" not-null="false" />

name="Name" access="property">

name="NAME" not-null="false" />

name="Granularity" access="property">

name="GRANULARITY" not-null="true" />

name="FromDate" access="property">

name="FROM_DATE" not-null="true" />

name="ToDate" access="property">

name="TO_DATE" not-null="true" />

name="Closed" access="property" type="YesNo">

name="CLOSED" not-null="true" />

name="CreatedBy" access="property">

name="CREATED_BY" not-null="false" />

name="CreatedDate" access="property" type="timestamp">

name="CREATED_DATE" not-null="false" />

name="LastModifiedBy" access="property">

name="LAST_MODIFIED_BY" not-null="false" />

name="LastModifiedDate" access="property" type="timestamp">

name="LAST_MODIFIED_DATE" not-null="false" />

<p>Слой веб-служб и интерфейсов доступа (ServiceStack)</p>

Генерируемые для слоя веб-служб C#-файлы предназначены для создания двух сборок: собственно служб и интерфейсов к ним, используемых клиентами.

Рис. 25. Классы, реализующие службы доступа к объектам домена

Рис. 26. Класс службы сохранения объектов

Перейти на страницу:

Все книги серии Библиотека программиста

Похожие книги