Compartilhar via


Propriedades de armazenamento de calculado e personalizadas

Todas as propriedades de domínio em um idioma específico do domínio (DSL) podem ser exibidas para o usuário no diagrama e no explorer seu idioma e podem ser acessadas pelo código do programa.No entanto, propriedades diferem na maneira como que seus valores são armazenados.

Tipos de propriedades do domínio

Na definição de DSL, você pode definir o tipo de uma propriedade de domínio, conforme listado na tabela a seguir:

Tipo de propriedade de domínio

Descrição

Padrão (padrão)

Uma propriedade de domínio que é salvo na armazenar e serializado para o arquivo.

Calculado

Uma propriedade de domínio somente leitura que não é salva no armazenamento, mas é calculada a partir de outros valores.

Por exemplo, Person.Age pode ser calculado a partir Person.BirthDate.

Você deve fornecer o código que executa o cálculo.Normalmente, você pode calcular o valor de outras propriedades do domínio.No entanto, você também pode usar recursos externos.

Armazenamento personalizada

Uma propriedade de domínio que não é salvo diretamente no armazenamento, mas pode ser tanto get e set.

Você deve fornecer os métodos de obtém e definir o valor.

For example, Person.FullAddress could be stored in Person.StreetAddress, Person.City, and Person.PostalCode.

Você também pode acessar recursos externos, por exemplo, para obter e definir valores de um banco de dados.

Seu código não deve definir os valores no armazenamento quando Store.InUndoRedoOrRollback é verdadeiro.Consulte transações e Setters personalizado.

Fornecendo o código para uma propriedade calculada ou personalizado de armazenamento

Se você definir o tipo de uma propriedade de domínio para o armazenamento de personalizado ou calculado, você precisa fornecer métodos de acesso.Quando você constrói sua solução, um relatório de erro dirá o que é necessário.

Para definir uma calculado ou propriedade de armazenamento personalizada

  1. Na DslDefinition.dsl, selecione a propriedade de domínio no diagrama ou em Explorer DSL.

  2. No Propriedades janela, defina a tipo campo para calculado ou Armazenamento personalizado.

    Certifique-se de que você definiu também sua tipo de que você deseja.

  3. Clique em Transformar todos os modelos de na barra de ferramentas do Solution Explorer.

  4. Sobre o Build menu, clique em Build Solution.

    A seguinte mensagem de erro: "YourClass não contém uma definição para GetYourProperty."

  5. Clique duas vezes a mensagem de erro.

    Dsl\GeneratedCode\DomainClasses.cs ou DomainRelationships.cs é aberto.Acima da chamada do método realçada, um comentário solicita que você fornecer uma implementação de GetYourProperty().

    ObservaçãoObservação

    Este arquivo é gerado a partir de DslDefinition.dsl.Se você editar esse arquivo, suas alterações serão perdidas na próxima vez que você clicar em Transformar todos os modelos de.Em vez disso, adicione o método exigido em um arquivo separado.

  6. Crie ou abra um arquivo de classe em uma pasta separada, por exemplo CustomCode\YourDomainClass. cs.

    Certifique-se de que o espaço para nome é o mesmo, como no código gerado.

  7. No arquivo de classe, escreva uma implementação parcial da classe de domínio.Na classe, escrever uma definição para a ausência de obter método semelhante ao exemplo a seguir:

    namespace Company.FamilyTree
    {  public partial class Person
       {  int GetAgeValue()
          { return System.DateTime.Today.Year - this.BirthYear; }
    }  }
    
  8. Se você definir tipo para Armazenamento personalizado, você também terá que fornecer um Set método.Por exemplo:

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

    Seu código não deve definir os valores no armazenamento quando Store.InUndoRedoOrRollback é verdadeiro.Consulte transações e Setters personalizado.

  9. Compile e execute a solução.

  10. Teste a propriedade.Certifique-se de que você tente Desfazer e Refazer.

Transações e Setters personalizado

No método conjunto da propriedade personalizada de armazenamento, você não precisará abrir uma transação, porque o método é chamado geralmente dentro de uma transação ativa.

No entanto, o método Set também pode ser chamado se o usuário invoca desfazer ou refazer, ou se uma transação está sendo revertida.Quando InUndoRedoOrRollback for true, o método Set deve se comportar da seguinte maneira:

  • Ele não deve fazer alterações no armazenamento, como, por exemplo, atribuindo valores a outras propriedades do domínio.O Gerenciador de desfazer definirá seus valores.

  • No entanto, ele deve atualizar qualquer recursos externos, como, por exemplo, banco de dados ou o conteúdo do arquivo ou objetos fora do armazenamento.Isso irá assegurar que eles são mantidos no synchronism com os valores no armazenamento.

Por exemplo:

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);
}

Para obter mais informações sobre transações, consulte Navegando e atualizando um modelo de código de programa.

Consulte também

Referência

Propriedades de propriedades do domínio

Conceitos

Navegando e atualizando um modelo de código de programa

Como definir uma linguagem específica de domínio