Руководство по Catharsis - часть 2: пример Catharsis

ОГЛАВЛЕНИЕ

Данная статья демонстрирует то, как 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.