次の方法で共有


計算プロパティおよびカスタム格納プロパティ

ドメイン固有言語のすべてのドメインのプロパティは (DSL)図の言語のエクスプローラーでユーザーに表示するプログラム コードからアクセスできます。 ただしこのプロパティは値が格納された相違点があります。

型のプロパティのドメイン

DSL 定義では次の表に示すようにドメインのプロパティを設定できます 種類 :

ドメインのプロパティの型

Description

標準 (既定値)

ストア に格納されファイルにシリアル化されたドメインのプロパティ。

計算されます。

ストアに格納されていないドメインの読み取り専用プロパティは他の値から計算されます。

たとえばPerson.Age は Person.BirthDate から計算できます。

計算を実行するコードを記述する必要があります。 通常他のドメインのプロパティから値を計算します。 ただし外部リソースを使用できます。

カスタム ストレージ

ストアに直接格納されていないドメインのプロパティはGet および Set あります。

値を取得および設定するメソッドを提供する必要があります。

たとえばPerson.FullAddress は Person.StreetAddressPerson.City と Person.PostalCode に格納できます。

取得するために外部リソース (たとえばデータベースから設定値にアクセスできます。

コードは Store.InUndoRedoOrRollback に当てはまる場合はストア値を設定する必要があります。 トランザクションおよびカスタムの setter を参照してください。

計算したりカスタム ストレージ] プロパティのコードを提供できます。

計算したりカスタム ストレージにドメインのプロパティの型を設定するとアクセスする手段を提供する必要があります。 ソリューションをビルドするとエラー レポートが必要であることを示します。

計算したりカスタム ストレージ] プロパティを定義するには

  1. DslDefinition.dsl には図または *** DSL Explorer *** ドメインのプロパティを選択します。

  2. [ENT0ENT] ウィンドウで***** Calculated ***** または *** Custom Storage *** に ENT1ENT [入力] フィールドを設定します。

    目的 種類 またはがに設定されていることを確認します。

  3. ソリューション エクスプローラー のツール バーの [ENT0ENT] をクリックします。

  4. [ビルド] メニューの [ソリューションのビルド] をクリックします。

    次のエラー メッセージが表示されます :YourClass 含まれていません 「 GetYourProperty の定義を」です。

  5. エラー メッセージがダブルをクリックします。

    Dsl GeneratedCode \ \ DomainClasses.cs 開きます。 強調表示されたメソッド呼び出しの前にコメントが GetYourProperty を実装するように要求します。

    注意

    このファイルは DslDefinition.dsl から生成されます。このファイルを編集すると[ENT0ENT] をクリックする変更点は次に失われます。代わりに別ファイルに必要なメソッドを追加します。

  6. 別のフォルダー CustomCode \YourDomainClass たとえば.cs ファイルのクラスを作成するか開きます。

    名前空間で生成されたコードと同じであることを確認します。

  7. クラス ファイルにドメイン クラスの実装の一部を記述します。 クラスで次の例のような 取得 したメソッドの定義を作成します :

    namespace Company.FamilyTree
    {  public partial class Person
       {  int GetAgeValue()
          { return System.DateTime.Today.Year - this.BirthYear; }
    }  }
    
  8. *** Custom Storage ***種類 を設定すると 設定 のメソッドを用意する必要があります。 次に例を示します。

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

    コードは Store.InUndoRedoOrRollback に当てはまる場合はストア値を設定する必要があります。 トランザクションおよびカスタムの setter を参照してください。

  9. ソリューションをビルドして実行します。

  10. プロパティをテストします。 元に戻すやり直し を試みることを確認します。

トランザクションおよびカスタムの setter

カスタム ストレージのプロパティの set メソッドではメソッドは通常アクティブなトランザクション内で呼び出されるのでトランザクションを開く必要はありません。

ただしメソッドがユーザーに戻す操作またはやり直し操作を開始するかトランザクションをロールバックすると呼ばれることもあります。 InUndoRedoOrRollback が true の場合メソッドは次のように動作する必要があります :

  • そのほかのドメインのプロパティに値を代入する場合などストア内の変更を行う必要があります。 元に戻すマネージャーは値を設定します。

  • ただしデータベースまたは外部リソース ファイルの内容などまたはストアの外部のオブジェクトを更新する必要があります。 これはストアの値を使用して非同期で保持されます。

次に例を示します。

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

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

参照

関連項目

ドメイン プロパティのプロパティ

概念

プログラム コードにおけるモデル内の移動およびモデルの更新

方法: ドメイン固有言語を定義する