生成済みクラスのオーバーライドおよび拡張
DSL 定義はドメイン固有言語に基づいて一連の強力なツールをビルドするプラットフォームです。 多くの拡張子と調整は DSL 定義から生成されたクラスをオーバーライドおよび拡張することによって作成できます。 これらのクラスはDSL 定義図で明示的に定義するとツールボックスエクスプローラーシリアル化を定義する他のクラスなどドメイン クラスが含まれています。
機能拡張機能
複数の機能は生成されたコードを拡張するために用意されています。
部分クラスのメソッドのオーバーライド
部分クラス定義ではクラスが複数の場所で定義します。 これは独自に記述したコードから生成されたコードを分離することができます。 手動で作成されたコードは生成されたコードから継承されたクラスをオーバーライドできます。
たとえばDSL 定義で Book ドメインという名前のクラスを定義したらオーバーライド メソッドを追加するカスタム コードを記述できます。:
public partial class Book
{
protected override void OnDeleting()
{
MessageBox.Show("Deleting book " + this.Title);
base.OnDeleting();
} }
注意
生成されたクラスのメソッドをオーバーライドして生成されるファイルから切り離されているファイルのコードを常に記述します。通常このファイルは CustomCode という名前のフォルダーに格納されます。生成されたコードを変更した場合DSL 定義からコードを生成する場合は失われます。
どのメソッドをオーバーライドできることを検出するにはクラス型のオーバーライドはスペースいます。 IntelliSense のヒントはメソッドをオーバーライドする方法を示します。
の派生クラス
生成されたクラスのメソッドの多くは固定セットのモデルの名前空間のクラスから継承されます。 ただし一部のメソッドは生成されたコードで定義されます。 通常これによってオーバーライドできないことを意味します ; 1 部分クラスで同じクラスの別の部分定義で定義されたメソッドをオーバーライドすることはできません。
いずれにしてもドメイン クラスの *** Generates Double Derived *** フラグを設定してこれらのメソッドをオーバーライドできます。 これは2 種類のクラスを他の抽象基本クラスである 1 つ生成されます。 すべてのメソッドとプロパティ定義は基本クラスでありコンストラクターのみ派生クラスです。
たとえばサンプル Library.dsl でCirculationBook のドメイン クラスに true に GeneratesDouble Derived のプロパティがあります。 そのドメイン クラスに対して生成されたコードはクラスを 2 つ含まれています :
CirculationBookBase抽象であるすべてのメソッドとプロパティが含まれています。
CirculationBookCirculationBookBase から派生します。 またコンストラクターを除き空です。
メソッドをオーバーライドするにはCirculationBook などの派生クラスの部分定義を作成します。 モデリングのフレームワークから継承される生成されるメソッドとメソッドをオーバーライドできます。
モデル要素関係図形図の要素およびコネクタを含むすべての型でこのメソッドを使用します。 生成された他のクラスのメソッドをオーバーライドすることもできます。 ToolboxHelper など生成されたクラスは常にの派生します。
カスタム コンストラクター
コンストラクターをオーバーライドすることはできません。 二重の派生クラスにコンストラクターは派生クラスである必要があります。
独自のコンストラクターを指定するにはDSL 定義のドメイン クラスの Has Custom Constructor を設定することもできます。 [入力] ENT0ENT をクリックすると生成されたコードはクラスのコンストラクターが含まれません。 これはコンストラクターの呼び出しが含まれます。 ソリューションをビルドする場合エラー レポートが発生します。 必要なコンポーネントを示す提供する生成されるコードのコメントを表示するには各エラー レポートをクリックします。
生成されたファイルとは別の書き込みコンストラクターを使用してファイルの部分クラスを定義します。
フラグを設定した拡張ポイント
フラグを設定した拡張ポイントはカスタム メソッドを提供することを示す場合はプロパティまたはチェック ボックスを設定できる DSL 定義の場所です。 カスタム コンストラクターは1 種類の例です。 そのほかの例は接続ビルダーにドメインのプロパティの Kind を計算したりカスタム ストレージに設定するか***** Is Custom ***** フラグの設定が含まれます。
どちらの場合もフラグを設定しコードを再生成するとビルド エラーが発生します。 必要な説明を提供するコメントを確認するために各エラーをクリックします。
規則
トランザクション マネージャーは指定したイベントが発生したプロパティの変更などトランザクションが終了する前に実行する規則を定義できます。 規則はストア内の複数の要素間で非同期を保持するために使用されます。 図にモデルの現在の状態を表示するたとえば規則が使用されます。
規則はクラス ベースのオブジェクトごとの規則を登録するコードを含む必要がないように定義されています。 詳細については、「規則によって変更内容がモデル内に反映される」を参照してください。
イベントを保存します。
モデル ストアは要素の追加と削除を含むストアの変更をプロパティ値への変更をリッスンするために使用できるイベントなどの機能を提供します。 イベント ハンドラーは後トランザクションの最後に呼び出されます。 通常これらのイベントがストアの外部のリソースを更新するために使用されます。
.NET イベント
図形のあるイベントにサブスクライブできます。 たとえば図形のマウスのクリックをリッスンできます。 各オブジェクトのイベントをサブスクライブするコードを記述する必要があります。 このコードは InitializeInstanceResources のオーバーライドで記述できます ()。
デコレータ図形の描画に使用するイベントは ShapeFields で生成されます。 例については、「方法: シェイプまたはデコレーターに対するクリック操作を受け取る」を参照してください。
これらのイベントは通常一つのトランザクション内で発生しません。 ストアに変更を加えるかトランザクションを作成する必要があります。