Поделиться через


Вычисляемые и пользовательские свойства хранилища

Все свойства домена в доменном языке DSL, могут отображаться пользователю на схеме и в обозревателе языка и возможен идентификатором программы.Однако свойства различаются в соответствии с их значениями сохраняются.

Типы свойств домена

В определении DSL, можно присвоить Тип свойства домена, как показано в следующей таблице:

Тип свойства домена

Описание

Стандартный (По умолчанию)

Свойство домена, сохраненные в хранилище и сериализовать в файл.

CALCULATED

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

Например, Person.Age может быть вычислено из Person.BirthDate.

Необходимо предоставить код, который выполняет вычисление.Как правило, высчитываете значение из других свойств домена.Однако можно также использовать внешние ресурсы.

Пользовательское хранилище

Свойство домена, не сохраняются непосредственно в хранилище, но может быть и получить и задать.

Необходимо предоставить методы, которые получают и задают значение.

Например, Person.FullAddress может храниться внутри Person.StreetAddress" Person.Cityи Person.PostalCode.

Кроме того, можно получить доступ к внешним ресурсам, например, чтобы получать и задавать значения из базы данных.

Код в хранилище, когда заданы значения Store.InUndoRedoOrRollback - true.См. Транзакции и пользовательские сеттеры.

Указав код расчетного или пользовательского свойства хранения

Если задать тип свойства домена на вычисляемый или пользовательское хранилище, необходимо предоставить методы доступа.При построении решения отчета об ошибках скажет, что требуется.

Рассчитываемое или задать свойство пользовательского хранилища

  1. В DslDefinition.dsl выберите свойство домена или в схеме или in Обозреватель DSL.

  2. в Свойства окно выберите Тип поле CALCULATED OR Пользовательское хранилище.

    Убедитесь, что имеется также имеет свой тип для которого нужно.

  3. Нажать Преобразовать все шаблоны в панели инструментов Обозреватель решений.

  4. В меню Построение выберите Построить решение.

    Выдается следующее сообщение об ошибке: "YourClass не содержит определение для GetYourProperty."

  5. Дважды щелкните сообщение об ошибке.

    Dsl \ GeneratedCode \ открытые DomainClasses.cs или DomainRelationships.cs.Перед выбранным вызовом метода комментарий предлагает предоставить реализацию GetYourProperty().

    ПримечаниеПримечание

    Этот файл создается из DslDefinition.dsl.При изменении этого файла, изменения будут потеряны при следующем запуске, щелкнуть Преобразовать все шаблоны.Вместо этого добавьте необходимый метод в отдельном файле.

  6. Создайте или откройте файл класса в отдельной папке, например CustomCode \YourDomainClasscs.

    Убедитесь, что пространство имен такое же, как и в сгенерированном коде.

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

    namespace Company.FamilyTree
    {  public partial class Person
       {  int GetAgeValue()
          { return System.DateTime.Today.Year - this.BirthYear; }
    }  }
    
  8. Если установка Тип В Пользовательское хранилищенеобходимо также предоставить a Установка метод.Примеры.

          void SetAgeValue(int value)
          { if (!Store.InUndoRedoOrRollback)
              this.BirthYear = 
                  System.DateTime.Today.Year - value; }
    

    Код в хранилище, когда заданы значения Store.InUndoRedoOrRollback - true.См. Транзакции и пользовательские сеттеры.

  9. Постройте и запустите это решение.

  10. Проверьте свойство.Убедитесь, что вы пытаетесь Отменить и Отмена действия.

Транзакции и пользовательские сеттеры

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

Однако метод Set может также вызываться, если пользователь вызывает отката или повтора или откатить транзакцию.После InUndoRedoOrRollback значение равно true, метод Set должен вести себя следующим образом:

  • Он не должен вносить изменения в хранилище, например присвоение значений к другим свойствам домена.Диспетчер отката установит их значения.

  • Однако он должен обновить любые внешние ресурсы, например содержимое базы данных или файла или объекты вне хранилища.Это гарантирует, что они сохраняются в синхронизме со значениями в хранилище.

Примеры.

void SetAgeValue(int value)
{ 
  // If we are in Undo, no changes to Store objects:
  if (!this.Store.InUndoRedoOrRollback)
  { 
    this.BirthYear = System.DateTime.Today.Year - value; 
  }
  // But always update external objects:
  System.IO.File.WriteAllText(AgeFile, value);
}

Дополнительные сведения о транзакциях см. в разделе Перемещение по модели и обновление модели в коде программы.

См. также

Ссылки

Свойства доменных свойств

Основные понятия

Перемещение по модели и обновление модели в коде программы

Определение доменного языка