Книга: Дефрагментация мозга. Софтостроение изнутри
Слой домена (NHibernate)
Слой домена (NHibernate)
Джинн NHibernate генерирует три C#-файла и один XML-файл проекции (маппинга) классов на структуры хранения.
Все классы домена являются расширяемыми (partial), что позволяет разработчику вынести специфичные не поддерживаемые моделью реализации свойств и методов классов в отдельные файлы.
Перечисляемый тип создаётся вместе с классами, позволяющими локализовать пользовательские названия его элементов, описанные в модели. По умолчанию будет использован язык модели, перевод необходимо осуществлять в технологии gettext.
Рис. 22. Перечисляемый тип слоя домена и его локализация
Рис. 23. Класс «Финансовый год» слоя домена
Для определяемых моделью сущностей генерируются классы, содержащие кроме соответствующих объявленным атрибутам свойств ещё и группу служебных методов для управления объектами, например, для сохранения или выборки по запросу на HQL или даже SQL. Такие методы часто используют служебные классы, объявленные в DomainSupport.cs.
Для объявленных в модели операций генерируется соответствующий метод интерфейса. Реализовать их нужно программисту в рамках расширения partial-класса.
Рис. 24. Класс «Учётный период» слоя домена
Отображение классов на структуры РСУБД соответствует стратегии «одна таблица на подкласс без дублирования атрибутов предка», достаточно хорошей в большинстве случаев, но и она может быть изменена.
Фрагмент файла проекции для класса «Финансовый год»
<!-Engine.FiscalYear->
<class name="Domain.Engine.FiscalYear" table="FISCAL_YEAR" schema="MYAPP">
<id name="Id" access="property" column="NIFISCAL_YEAR">
<generator class="native">
<param name="sequence">MYAPP.SEQ_FISCAL_YEAR</param>
</generator>
</id>
<version name="Version" column="VERSION" type="int" access="property" />
<set name="Periods" table="MYAPP.PERIOD" inverse="true" lazy="true" cascade="none">
<key column="NI_FISCAL_YEAR" />
<one-to-many class="Domain.Engine.Period" />
</set>
<many-to-one name="EntityRegistry" class="Domain.Core.EntityRegistry" unique="true">
<column name="NI_ENTITY_REGISTRY" not-null="false" />
</many-to-one>
<property name="Name" access="property">
<column name="NAME" not-null="false" />
</property>
<property name="Granularity" access="property">
<column name="GRANULARITY" not-null="true" />
</property>
<property name="FromDate" access="property">
<column name="FROM_DATE" not-null="true" />
</property>
<property name="ToDate" access="property">
<column name="TO_DATE" not-null="true" />
</property>
<property name="Closed" access="property" type="YesNo">
<column name="CLOSED" not-null="true" />
</property>
<property name="CreatedBy" access="property">
<column name="CREATED_BY" not-null="false" />
</property>
<property name="CreatedDate" access="property" type="timestamp">
<column name="CREATED_DATE" not-null="false" />
</property>
<property name="LastModifiedBy" access="property">
<column name="LAST_MODIFIED_BY" not-null="false" />
</property>
<property name="LastModifiedDate" access="property" type="timestamp">
<column name="LAST_MODIFIED_DATE" not-null="false" />
</property>
</class>
- Тип данных домена
- Персональный послойный процесс
- Риски, связанные с администрированием домена
- 7.4.2. Имя компьютера и домена
- Многослойные интерфейсы
- 13.3.1. Установка текстового домена: textdomain()
- Глава 18 Администрирование домена
- Samba как контроллер домена
- Настройка домена для использования почтового сервера
- Изменение типа данных домена
- Определение имен рабочей станции, пользователя и домена
- Выбор домена и хостинга