Руководство по Catharsis - часть 2: пример Catharsis - Объект доступа к данным (Dao)

ОГЛАВЛЕНИЕ

 

Теперь мы рассмотрим объект доступа к данным (Dao) - это тот объект, которые читает информацию из базы данных посредством NHibernate. Он используется в качестве части функциональности поиска для возврата всех кортежей базы данных, которые удовлетворяют определенный набор критериев. Он также обрабатывает кляузы сортировки (Order-By).

А вот часть кода из файла:

public override IList<Agent> GetBySearch(ISearch searchObject)
{
Check.Require(searchObject.Is(), “Use only AgentSearch not-null instance for searching Agent entities”);
  var search = searchObject as AgentSearch;
  if (search.Is())
  {
    Criteria.CreateEqual(Str.Common.ID, search.IDSearch);//Поиск идентификатора ID         
    Criteria.CreateLike(Str.Common.Code, search.Example.Code);
    Criteria.CreateEqual(Str.Business.Agent.IsInternal,    search.IsInternalSearch);
    Criteria.CreateGe(Str.Business.Agent.Rating, search.RatingFrom);
    Criteria.CreateGe(Str.Business.Agent.CommissionRate, search.CommissionRateFrom);
    Criteria.CreateGe(Str.Business.Agent.CommissionPeak, search.CommissionPeakFrom);
    Criteria.CreateGeDate(Str.Business.Agent.Started, search.StartedFrom);
    Criteria.CreateGeDate(Str.Business.Agent.Finished, search.FinishedFrom);
    Criteria.CreateLe(Str.Business.Agent.Rating, search.RatingTo);
    Criteria.CreateLe(Str.Business.Agent.CommissionRate, search.CommissionRateTo);
    Criteria.CreateLe(Str.Business.Agent.CommissionPeak, search.CommissionPeakTo);
    Criteria.CreateLeDate(Str.Business.Agent.Started, search.StartedTo);
    Criteria.CreateLeDate(Str.Business.Agent.Finished, search.FinishedTo);
    Criteria.CreateEqual(Str.Controllers.Currency, search.Example.Currency);
    Criteria.CreateEqual(Str.Controllers.Country, search.Example.Country);
  }
  return GetListByCriteria(searchObject);
}

Класс Str - это список констант, которые используются вместо строк для того, чтобы избежать ошибок и сделать код более обслуживаемым. Данные файлы можно найти в следующем месте:

А вот блок, демонстрирующий класс Agent:

public partial class Str
    {
        public partial class Business
        {
            #region Agent
            public class Agent
            {
                protected Agent() { }
                public const string IsInternal = "IsInternal";
                public const string Rating = "Rating";

Метод GetBySearch в DAO вызывается используя SearchObject , как это можно заметить в подписи метода: 

public override IList<Agent> GetBySearch(ISearch searchObject)
{
Check.Require(searchObject.Is(), “Use only AgentSearch not-null instance for searching Agent entities”);
  var search = searchObject as AgentSearch;