次の方法で共有


ドメイン固有言語をカスタマイズするコードの記述

ここではドメイン固有言語モデルにアクセスしたり変更または作成するカスタム コードを使用する方法を示します。

DSL を使用するコードを作成できる複数のコンテキストがあります :

DslDefinition.dsl で定義したクラスのインスタンスはメモリ ストア (IMS)またはストアと呼ばれるデータ構造に格納されます 。 でDSL を定義するクラスは引数としてコンストラクターにストアを常に書き込みます。 たとえばDSL が Example という名前のクラスを定義する場合 :

Example element = new Example (theStore);

ストアにはオブジェクトを保持すること (ではなく通常のオブジェクト) いくつかの利点があります。

  • トランザクション 。 トランザクションに関連する一連の変更をグループ化できます :

    using (Transaction t = store.TransactionManager.BeginTransaction("updates"))

    {

    // make several changes to Store elements here

    t.Commit();

    }

    例外が変更中に発生すると最後のコミット () が実行されないようにストアは前の状態にリセットされます。 これはエラーが矛盾した状態にモデルを継続することを確認できます。 詳細については、「プログラム コードにおけるモデル内の移動およびモデルの更新」を参照してください。

  • バイナリ関係 。 2 個のクラス間の関係を定義する場合は両端のインスタンスに他の末尾に移動するプロパティがあります。 2 種類の末尾は常に同期されます。 たとえばParents とその子という名前のロールの親子関係の関係を定義して記述できます。:

    John.Children.Add(Mary)

    次の式の両方で同様です :

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    また記述して同じ効果を実現できます :

    Mary.Parents.Add(John)

    詳細については、「プログラム コードにおけるモデル内の移動およびモデルの更新」を参照してください。

  • イベントと規則 。 指定した変更が発生するたびに発生する規則を定義できます。 規則はダイアグラムの図形を最新表示してモデル要素として使用されます。 詳細については、「変更内容への対応および変更内容の反映」を参照してください。

  • シリアル化 。 ストアはファイルに含めるオブジェクトをシリアル化する標準的な方法を提供します。 シリアル化および逆シリアル化する規則をカスタマイズできます。 詳細については、「ファイル格納処理および XML シリアル化処理のカスタマイズ」を参照してください。

参照

概念

ドメイン固有言語のカスタマイズおよび拡張