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

ОГЛАВЛЕНИЕ

Члены:

#region members
IList<AgentContract> _contracts;
  // Нет членов для стандартного значения - это выполняется посредством шаблона PROTOTYPE по Facade.CreateNew()
#endregion members

Каждый агент (Agent) может иметь множество контрактов (Contracts) и это будет обсуждено позже.

Некоторые свойства кода продемонстрированы ниже: 

#region properties
/// Уникальный код
public virtual string Code { get; set; }
/// Переключатель IsInternal
public virtual bool IsInternal { get; set; }
/// небольшое значение int в качестве рейтинга - Rating (для демонстрации возможностей формата)
public virtual short Rating { get; set; }
/// десятичные значения для подсчета комиссионных (для демонстрации возможностей формата)
public virtual decimal CommissionRate { get; set; }
/// десятичные значения для сохранения информации о наибольшей комиссии (для демонстрации возможностей формата)
public virtual decimal CommissionPeak { get; set; }
/// codelist
public virtual Currency Currency { get; set; } 

Методы получения и установки значений (Get\Set) существуют для каждого свойства. Заметьте, что тип данных для условных единиц (Currency) является Currency потому, что для этого используется другая сущность.

Следующий код специфичен для данной сущности, ведь агент может иметь от одного до множества контрактов.

#region contract list
/// Список контрактов (загруженные файлы)
public virtual IList<AgentContract> Contracts
{
     get
     {
          if (_contracts.IsNull())
          {
             _contracts = new List<AgentContract>();}
          return _contracts;
      }
      protected set { _contracts = value; }
}
#endregion contract list        

Каждая сущность в Catharsis имеет некоторые перегруженные абстрактные методы, которые могут помочь в определении сущности. Свойство, возвращаемое в данные методы (Code в указанном ниже примере), может быть установлено при добавлении сущности используя Guidence в Catharsis.

#region override abstract
/// Предоставляет быстрое строковое описание  об экземпляре 'Agent'
public override string ToDisplay()
{
    // Метод зачастую используется по отношению к View
    // тем самым предоставляя четкий и понятный
    // набор свойств (разделенный пробелами ' '),
    // что быстро предоставит информацию о данном экземпляре
     return Code;
}
/// Возвращаемое значение должно быть обработано в качестве уникального бизнес-ключа.
/// Метод Equal (реализованный в базовом классе Tracked) будет использовать его  
/// для сравнения двух агентов (Agents)
protected override string GetDomainObjectSignature()
{
    // Также стоит добавить возврат свойства (или список свойств, разделенных "|")
    // что позволит различать сущности
   return Code;
}
#endregion override abstract
  

Конкретный класс AgentModel выглядит следующим образом.

/// <summary>
/// Все данные и свойства привязки для представлений 'Agent'
/// </summary>
public class AgentModel : BaseEntityModel<Agent>, IAgentModel
{
    /// <summary>
    /// Устанавливает ShowExportAction == true (позволяет экспортировать в Excel )
    /// </summary>
    public AgentModel()
       : base()
    {
        ExportModel.ShowExportAction = true;
    }
    /// <summary>
    /// Поиск объекта, содержащего пример данной сущности
    /// и он может быть расширен более мощными свойствами для поиска
    /// </summary>
    public new AgentSearch SearchParam
    {
       get { return base.SearchParam as AgentSearch; }
       set { base.SearchParam = value; }
     }
 }

В следующей главе мы поговорим о практическом методе изучения того, как работает структура Catharsis при добавлении новых сущностей и их манипуляции.

Дополнительная информация  

Исходный код для Catharsis вы можете загрузить по данной ссылке:
http://www.codeplex.com/Catharsis

Данный документ исследует пример решения Firm.SmartControls для структуры Catharsis.