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
Na DslDefinition.dsl, selecione a propriedade de domínio no diagrama ou em Explorer DSL.
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.
Clique em Transformar todos os modelos de na barra de ferramentas do Solution Explorer.
Sobre o Build menu, clique em Build Solution.
A seguinte mensagem de erro: "YourClass não contém uma definição para GetYourProperty."
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çã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.
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.
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; } } }
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.
Compile e execute a solução.
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