Compartir a través de


Propiedades calculadas y de almacenamiento personalizado

Todas las propiedades de dominio en un lenguaje específico (DSL) se pueden presentar al usuario en el diagrama y en el explorador del lenguaje, y se puede tener acceso mediante código de programa. Sin embargo, las propiedades difieren de la manera que sus valores se almacenan.

Tipos de propiedades de dominio

En la definición de DSL, puede establecer Tipo de una propiedad del dominio, como se muestra en la tabla siguiente:

Clase de la propiedad de dominio

Descripción

Estándar (valor predeterminado)

Una propiedad de dominio que se guarda en el almacén y serializado al archivo.

calculado

Una propiedad de sólo lectura del dominio que no se guarda en el almacén, pero se calcula de otros valores.

Por ejemplo, Person.Age podría calcular de Person.BirthDate.

Tiene que proporcionar el código que realiza el cálculo. Normalmente, se calcula el valor de otras propiedades del dominio. Sin embargo, también puede utilizar los recursos externos.

almacenamiento personalizado

Propiedad de dominio que no se guardan directamente en el almacén, pero puede ser ambas get y set.

Tiene que proporcionar los métodos que obtienen y establecen el valor.

Por ejemplo, Person.FullAddress se podría almacenar en Person.StreetAddress, Person.City, y Person.PostalCode.

También puede tener acceso a recursos externos, por ejemplo para obtener y establecer valores de una base de datos.

El código no debería establecer valores en el almacén cuando Store.InUndoRedoOrRollback es true. Vea transacciones y Setters personalizado.

Proporcionar el código para una propiedad calculada o personalizada de almacenamiento

Si establece el Tipo de una propiedad de dominio al almacenamiento calculado o personalizado, tiene que proporcionar métodos de acceso. Cuando se compila la solución, un informe de error indicará se precisa.

Para definir una propiedad calculada o personalizada de almacenamiento

  1. En DslDefinition.dsl, seleccione la propiedad del dominio en el diagrama o en Explorador ADSL.

  2. en la ventana de Propiedades , establezca el campo de Tipo a calculado o a almacenamiento personalizado.

    Asegúrese de que también haya establecido el tipo a lo que desee.

  3. Haga clic Transformar todas las plantillas en la barra de herramientas de Explorador de soluciones.

  4. En el menú Compilar, haga clic en Compilar solución.

    Recibe el mensaje de error siguiente: “TheClass no contiene una definición de GETTheProperty.”

  5. Haga doble clic en el mensaje de error.

    El ADSL \GeneratedCode\DomainClasses.cs or DomainRelationships .cs. Sobre la llamada al método resaltado, solicitudes de comentario se para proporcionar una implementación para GetTheProperty().

    Nota

    Este archivo se genera en DslDefinition.dsl.Si edita este archivo, los cambios se perderán la próxima vez que hace clic en Transformar todas las plantillas.En su lugar, agregue el método necesario en un archivo independiente.

  6. Cree o abra un archivo de clase en una carpeta independiente, por ejemplo CustomCode \TheDomainClass.cs.

    Asegúrese de que el espacio de nombres es igual que en el código generado.

  7. En el archivo de clase, escriba una implementación de clase parcial del dominio. En la clase, escriba una definición para el método que falta de obtener similar al ejemplo siguiente:

    namespace Company.FamilyTree
    {  public partial class Person
       {  int GetAgeValue()
          { return System.DateTime.Today.Year - this.BirthYear; }
    }  }
    
  8. Si se Tipo establecido en almacenamiento personalizado, también tiene que proporcionar un método de conjunto . Por ejemplo:

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

    El código no debería establecer valores en el almacén cuando Store.InUndoRedoOrRollback es true. Vea transacciones y Setters personalizado.

  9. Compile y ejecute la solución.

  10. pruebe la propiedad. Asegúrese de que se ejecute Deshacer y Rehacer.

transacciones y Setters personalizado

En el método set de propiedad personalizada de almacenamiento, no tiene que iniciar una transacción, porque el método se denomina normalmente dentro de una transacción activa.

Sin embargo, el método set también podría llamar si el usuario invoca deshacer o rehacer, o si una transacción está siendo revierte. Cuando InUndoRedoOrRollback es true, el método set debe comportarse como sigue:

  • No debe realizar cambios en el almacén, como asignar valores a otras propiedades del dominio. El administrador de deshacer establecerá sus valores.

  • Sin embargo, debe actualizar cualquier recurso externo, como base de datos o el contenido del archivo, o los objetos fuera del almacén. Así se asegurará de que se mantendrán sincronismo con los valores en el almacén.

Por ejemplo:

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 obtener más información sobre transacciones, consulte Navegar y actualizar un modelo en el código del programa.

Vea también

Referencia

Propiedades de las propiedades de dominio

Conceptos

Navegar y actualizar un modelo en el código del programa

Cómo: Definir lenguajes específicos de dominio