Partager via


Propriétés de stockage calculées et personnalisées

Toutes les propriétés de domaine dans un langage spécifique au domaine peuvent (DSL) être affichées à l'utilisateur sur le diagramme et dans votre explorateur de langage, et sont accessibles par le code du programme. Toutefois, les propriétés diffèrent de la manière que leurs valeurs sont stockées.

Types de propriétés de domaine

Dans la définition DÉSOLÉ, vous pouvez définir type d'une propriété de domaine, comme indiqué dans le tableau suivant :

type de propriété de domaine

Description

Standard (valeur par défaut)

Une propriété de domaine qui est stockée dans le magasin et sérialisée au fichier.

calculé

Une propriété de champ en lecture seule qui n'est pas inscrite dans le magasin, mais est calculée d'autres valeurs.

Par exemple, Person.Age peut être calculé à partir de Person.BirthDate.

Vous devez fournir le code qui exécute le calcul. en général, vous calculez la valeur d'autres propriétés de domaine. Toutefois, vous pouvez également utiliser des ressources externes.

stockage personnalisé

Une propriété de domaine qui n'est pas inscrite directement dans le magasin, mais peut être fois get et défini.

Vous devez fournir des méthodes qui obtiennent et définissent la valeur.

Par exemple, Person.FullAddress peut être stocké dans Person.StreetAddress, Person.City, et Person.PostalCode.

Vous pouvez également accéder à des ressources externes, par exemple pour obtenir et définir des valeurs d'une base de données.

Votre code ne doit pas définir des valeurs dans le magasin lorsque Store.InUndoRedoOrRollback est true. Consultez Transactions et accesseurs Set personnalisés.

Fourniture du code pour une propriété calculée ou personnalisée de stockage

Si vous définissez le type de propriété de domaine au stockage calculées ou personnalisé, vous devez fournir l'accès aux méthodes. Lorsque vous générez votre solution, un rapport d'erreur indique ce qui est requis.

pour définir une propriété calculée ou personnalisée de stockage

  1. dans DslDefinition.dsl, sélectionnez la propriété de domaine dans le diagramme ou dans Explorateur DÉSOLÉ.

  2. dans la fenêtre de Propriétés , définissez le champ de type à calculé ou à stockage personnalisé.

    Assurez -vous que vous avez également affecter à son Type à ce que vous souhaitez.

  3. Cliquez sur Transformer tous les modèles dans la barre d'outils d' Explorateur de solutions.

  4. Dans le menu Générer, cliquez sur Générer la solution.

    Vous obtenez le message d'erreur suivant : « YourClass ne contient pas de définition pour getYourProperty ».

  5. Double-cliquez sur le message d'erreur.

    DÉSOLÉ \GeneratedCode\DomainClasses.cs or DomainRelationships .cs s'ouvre. Au-dessus de l'appel de méthode en surbrillance, un commentaire vous invite à fournir une implémentation pour getYourProperty().

    Notes

    Ce fichier est généré à partir de DslDefinition.dsl.si vous modifiez ce fichier, vos modifications seront perdues la prochaine fois que vous cliquez sur Transformer tous les modèles.À la place, ajoutez la méthode requise dans un fichier séparé.

  6. créez ou ouvrez un fichier de classe dans un dossier distinct, par exemple CustomCode \YourDomainClass.cs.

    Vérifiez que l'espace de noms est le même que dans le code généré.

  7. Dans le fichier de classe, entrez une implémentation partielle de la classe de domaine. Dans la classe, entrez une définition pour la méthode manquante de Get qui ressemble à l'exemple suivant :

    namespace Company.FamilyTree
    {  public partial class Person
       {  int GetAgeValue()
          { return System.DateTime.Today.Year - this.BirthYear; }
    }  }
    
  8. Si vous type défini à stockage personnalisé, vous devez également fournir une méthode de Jeu . Par exemple :

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

    Votre code ne doit pas définir des valeurs dans le magasin lorsque Store.InUndoRedoOrRollback est true. Consultez Transactions et accesseurs Set personnalisés.

  9. Générez et exécutez la solution.

  10. testez la propriété. assurez-vous que vous essayez Undo et Rétablir.

Transactions et accesseurs Set personnalisés

Dans la méthode Set de propriété personnalisée de stockage, vous ne devez pas ouvrir une transaction, car la méthode est généralement dénommée à l'intérieur d'une transaction active.

Toutefois, la méthode Set peut également être appelée si l'utilisateur appelle la commande undo ou la phase de rétablissement, ou si une transaction est annulée. Lorsque InUndoRedoOrRollback est vraie, votre méthode Set doit se comporter comme suit :

  • Elle ne doit pas effectuer de modifications dans le magasin, comme les valeurs d'assignation à d'autres propriétés de domaine. Le gestionnaire d'annulation définira leurs valeurs.

  • Toutefois, il doit mettre à jour toutes les ressources externes, telles que la base de données ou le contenu du fichier, ou objets à l'extérieur de le magasin. Vous êtes ainsi assuré qu'ils sont conservés dans le synchronisme avec les valeurs du magasin.

Par exemple :

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

Pour plus d'informations sur les transactions, consultez Navigation et mise à jour d'un modèle dans le code de programme.

Voir aussi

Référence

Propriétés des propriétés de domaine

Concepts

Navigation et mise à jour d'un modèle dans le code de programme

Comment : définir un langage spécifique à un domaine