Partager via


Écrire du code pour personnaliser un langage spécifique à un domaine

Cette section vous montre comment utiliser du code personnalisé pour accéder, modifier ou créer un modèle dans un langage spécifique au domaine (DSL).

Contexte d’écriture de code pour un DSL

Il existe plusieurs contextes dans lesquels vous pouvez écrire du code qui fonctionne avec un DSL :

Magasin en mémoire

Les instances des classes que vous définissez dans DslDefinition.dsl sont conservées dans une structure de données appelée Magasin en mémoire (IMS) ou Store. Les classes que vous définissez dans une DSL prennent toujours un Magasin en tant qu’argument pour le constructeur. Par exemple, si votre DSL définit une classe appelée Example :

Example element = new Example (theStore);

La conservation d’objets dans le Store, au lieu d’objets ordinaires, offre plusieurs avantages.

  • Transactions. Vous pouvez regrouper une série de modifications connexes dans une transaction :

    using (Transaction t = store.TransactionManager.BeginTransaction("updates"))
    {
      // make several changes to Store elements here
      t.Commit();
    }
    

    Si une exception se produit pendant les modifications, de sorte que le Commit() final n’est pas effectué, le Windows Store est réinitialisé à son état précédent. Cette approche vous permet de vous assurer que les erreurs ne quittent pas le modèle dans un état incohérent. Pour plus d’informations, consultez Navigation et mise à jour d’un modèle dans le code du programme.

  • Relations binaires. Si vous définissez une relation entre deux classes, les instances des deux extrémités ont une propriété qui accède à l’autre extrémité. Les deux extrémités sont toujours synchronisées. Par exemple, si vous définissez une relation de parenté avec des rôles nommés Parents et Enfants, vous pouvez écrire :

    John.Children.Add(Mary)

    Les deux expressions suivantes sont désormais vraies :

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    Vous pouvez également obtenir le même effet en écrivant :

    Mary.Parents.Add(John)

    Pour plus d’informations, consultez Navigation et mise à jour d’un modèle dans le code du programme.

  • Règles et événements. Vous pouvez définir des règles qui se déclenchent chaque fois que des modifications spécifiées sont apportées. Les règles sont utilisées, par exemple, pour conserver les formes sur le diagramme à jour avec les éléments de modèle qu’ils présentent. Pour plus d’informations, consultez Réponse aux modifications et propagation des modifications.

  • Sérialisation. Le Store fournit un moyen standard de sérialiser les objets qu’il contient dans un fichier. Vous pouvez personnaliser les règles de sérialisation et de désérialisation. Pour plus d’informations, consultez Personnalisation du stockage de fichiers et de la sérialisation XML.