Руководство по Catharsis - часть 2: пример Catharsis
ОГЛАВЛЕНИЕ
Пример проекта Catharsis
Catharsis - это мощный инструмент быстрой разработки приложений (RAD - Rapid Application Development), который использует набор лучших шаблонов разработки, составленных вокруг конкретной архитектуры используя MVC.
Используя Guidance, структура предлагает функциональность быстрой разработки приложений в трудоемких архитектурах корпоративного уровня.
До того, как мы продолжим изучение примера, вам стоит ознакомиться с установкой Catharsis, описанной в предыдущей статье. Как только вы установите Catharsis, данная статья послужить следующим логическим шагом в получении больших познаний того, как данная структура может помочь вам в быстрой сборке сложных приложений. После прочтения данного документа, вам стоит перейти к практическому применению структуры, и следующая статья предложит пошаговую инструкцию использования структуры.
Введение
Пример решения содержит такие сущности, как Agent (Агент) и AgentContract (КонтрактАгента). В данной части мы рассмотрим то, как данные сущности интегрированы в структуру Catharsis.
Давайте сначала исследуем сущности Insurance Agent (Страховой агент). Начнем мы с изучения таблицы базы данных для того, чтобы найти информацию, хранимую для страхового агента и затем исследуем слой данных и увидим то, как таблицы встраиваются в приложение. Здесь мы видим преобразование файла NHibernate и объекты доступа к данным (интерфейс DAO - Data Access Object) в решении.
А вот скрипт создания таблиц баз данных:
CREATE TABLE [dbo].[InsuranceAgent](
[InsuranceAgentId] [int] IDENTITY(1,1) NOT NULL,
[Code] [nvarchar](150) NOT NULL,
[IsInternal] [bit] NOT NULL,
[Rating] [smallint] NOT NULL,
[CommissionRate] [decimal](18, 10) NOT NULL,
[CommissionPeak] [decimal](18, 2) NOT NULL,
[CurrencyId] [smallint] NOT NULL,
[CountryId] [smallint] NOT NULL,
[GenderId] [tinyint] NOT NULL,
[Started] [datetime] NOT NULL,
[Finished] [datetime] NULL,
CONSTRAINT [PK_InsuranceAgent] PRIMARY KEY CLUSTERED
(
[InsuranceAgentId] ASC
)
А это преобразование файла HNibernate для InsuranceAgent:
<?xml version='1.0' encoding='utf-8' ?>
<hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'
namespace='Firm.SmartControls.Entity.Insurance' assembly='Firm.SmartControls.Entity'>
<class name='Agent' table='InsuranceAgent' lazy='true' >
<id name='ID' column='InsuranceAgentId' >
<generator class='native'></generator>
</id>
<property not-null='true' name='Code' />
<property not-null='true' name='IsInternal' />
<property not-null='true' name='Rating' />
<property not-null='true' name='CommissionRate' />
<property not-null='true' name='CommissionPeak' />
<property not-null='true' name='Started' />
<property not-null='false' name='Finished' />
<many-to-one name='Currency' column='CurrencyId' lazy='false' ></many-to-one>
<many-to-one name='Country' column='CountryId' lazy='false' ></many-to-one>
<many-to-one name='Gender' column='GenderId' lazy='false' ></many-to-one>
<bag name='Contracts' inverse='true' lazy='true'
cascade='all-delete-orphan' >
<key column='InsuranceAgentId' />
<one-to-many class='AgentContract' />
</bag>
</class>
</hibernate-mapping>
Заметьте, что lazy="true" означает, что экземпляр объекта будет создан тогда, когда он необходим.
Первые семь параметров, указанных в таблице преобразования, являются простым построением соответствий. Currency, Country и Gender являются соответствиями типа один-ко-многим. Это скорее ‘типы сущностей’, чем простые ‘типы значений’.
Они обрабатываются в виде CodeLists в решении Catharsis.