方法: ドメイン固有言語を定義する
ドメイン固有言語を定義するには (DSL)テンプレートから Visual Studio ソリューションを作成します。ソリューションの主要部分はDslDefinition.dsl に格納されるユース ケース図定義です。DSL 定義はDSL のクラスと図形を定義します。変更した後これらの要素に追加しDSL の詳細をカスタマイズするプログラム コードを追加できます。
DSL を初めてこのサイトで検索できる DSL Tools Lab を使用することをお勧めします : Visualizaton and Modeling SDK
このトピックの内容
テンプレート ソリューションの選択
DSL を定義するパターン
モデル要素クラス
ダイアグラムの図形
参照とコネクタ
リストを含む図形 : 図形のコンパートメント
別の図形の境界のポート
スイムレーン
プロパティの型
DSL のカスタマイズ
トラブルシューティング
テンプレート ソリューションの選択
DSL を定義するには次のコンポーネントがインストールされている必要があります :
Visual Studio |
|
Visual Studio SDK |
|
Visual Studio の Visualization and Modeling SDK |
新しいドメイン固有言語を作成するにはドメイン固有言語のプロジェクト テンプレートを使用して Visual Studio の新しいソリューションを作成します。
DSL のソリューションを作成するには
[入力] ENT7ENT ダイアログ ボックスの *** Other Project Types/Extensibility *** で検索できる *** Domain-Specific Language *** のテンプレートを使用してソリューションを作成します。
[入力] ENT0ENT をクリックすると***** Domain-Specific Language Wizard ***** はテンプレートの DSL のソリューションのリストを開き表示されます。
説明を確認するために各テンプレートをクリックします。すると非常によく似た作成するソリューションを選択します。
DSL の各テンプレートは基本的な機能はDSL を定義します。独自の要件に合わせてこの DSL を編集します。
詳細については各サンプルをクリックします。
スイムレーンを持つ DSL を作成するに ENT0ENT [] を選択します。スイムレーンは図の縦または横のパーティションです。
ポートを持つ DSL を作成するに ENT0ENT [] を選択します。ポートは大規模な図形の端に図形です。
コンパートメントの形状を持つ DSL を定義するに ENT0ENT [] を選択します。図形のコンパートメントを項目のリストが含まれています。
安全でないためまたはそのほかの場合 ENT0ENT [] を選択します。
[!メモ]
クラス図またはコンポーネント図を生成するにはUML モデルを使用してください。UML モデリング ツールは一つのモデルの周囲に統合された一連の図に示します。これらは拡張可能でDSL と ModelBus を使用して統合できます。詳細については、「ソフトウェア設計のためのモデルの開発」を参照してください。
で Windows フォームまたは WPF DSL 表示サーフェイスを作成するには***** Minimal WPF Designer ***** [入力] ENT0ENT を選択します。エディターを定義するコードを記述する必要があります。詳細については、次のトピックを参照してください。
適切なウィザード ページでDSL のファイル名拡張子を入力します。これはDSL ファイルに含まれているインスタンスが使用する拡張です。
コンピューター上のすべてのアプリケーションに関連付けられていないまたはをクリックします。DSL をインストールするコンピューターのファイル名拡張子は。たとえばdocx と htm は不適切なファイル名の拡張子です。
ウィザードに入力した拡張子をユース ケースとして使用される場合は警告します。別のファイル名拡張子を使用することを検討してください。以前の実験デザイナーをクリアするにはVisual Studio SDK の実験用インスタンスをリセットできます。次に***** Microsoft Visual Studio 2010 SDK ***** ツール と *** Reset the Microsoft Visual Studio 2010 Experimental instance ***[入力] ENT0ENT をクリックし[ENT2ENT] をクリックします。
他のページの設定を調整するか既定値をそのまま使用します。
[完了] をクリックします。
ウィザードは 2 または 3 のプロジェクトを含むを作成しDSL 定義からコードをソリューションを生成します。
ユーザー インターフェイスは次の図のようになります。
この方法はドメイン固有言語を定義します。詳細については、「ドメイン固有言語ツールのユーザー インターフェイスの概要」を参照してください。
ソリューションをテストします。
テンプレートのソリューションはとを使用して変更または DSL できる機能を提供します。
ソリューションをテストするにはF5 キーまたは Ctrl + F5 キーを押します。Visual Studio の新しいインスタンスが実験モードで開きます。
Visual Studio の新しいインスタンスでソリューション エクスプローラーでサンプル ファイルを開きます。これはツールボックスがある図として開きます。
***** Minimal Language *****テンプレートから作成したソリューションを実行するとの実験 Visual Studio は次の例に似ています :
ツールを使用してください。要素を作成し接続します。
Visual Studio の実験用のインスタンスを閉じます。
[!メモ]
DSL を変更した場合そのテスト サンプル ファイルの図形をされません。ただし新しい要素を作成できます。
テンプレートの DSL の変更
テンプレートの DSL 定義のドメイン クラスおよび図形クラスは一部またはすべての名前を変更し維持します。新しいクラス名にスペースや区切り記号を使用せずに有効な CLR の名前になります。
これらのクラスを保持することは特に便利です :
ルートのクラスは *** Classes and Relationships *** の下に DSL 定義図の左上に表示されます。DSL とは別の名前にその名前を変更します。たとえばという名前の MusicLibrary DSL は Music という名前のルートのクラスがあります。
図のクラスは ENT0ENT [出力] 列の定義のユース ケース図の右下に表示されます。それを右にスクロール確認する必要があります。これは通常YourDsl ダイアグラム という名前です。
*** Task Flow *** テンプレートを使用するスイムレーンのダイアグラムを作成および ActorSwimlane のアクターのドメイン クラスおよび図形を保持し名前を変更する必要があります。
他のクラスを削除するか要件に合わせてまたは名前を変更します。
DSL を定義するパターン
これは一つまたは二つの機能を同時に追加または変更することで DSL を開発することをお勧めします。機能を追加しDSL を実行しテストし二つの機能を追加します。DSL の一般的な機能は次のとおりである可能性があります :
ドメイン モデルクラス図そのクラスの表示要素に必要な図形およびユーザーが要素を作成できる要素ツールに接続する要素を埋め込む関係。
図形の内容を表示できます。ドメイン クラスデコレータ ドメインのプロパティ。
参照リレーションシップと図とユーザーがリンクを作成できるようにするコネクタ ツールの表示形式。
プログラム コードが必要な検証制約またはメニュー コマンドなどのカスタマイズ。
以降のセクションではDSL の機能の最も便利な種類の作成方法について説明します。DSL を生成できますがこれらは最もよく使用されますが他のパターンがあります。
[!メモ]
機能を追加した後ソリューション エクスプローラーのツール バーの [ENT0ENT] をクリックする前に必ずビルド DSL を実行します。
次の図はこのトピックの例として使用される DSL のクラスおよび関係の一部を示します。
次の図はこの例の DSL モデルです :
[!メモ]
「モデル」とはユーザーが作成し図としてDSL のインスタンスを表示します。このトピックではDSL を使用すると両方の DSL 定義図とモデル図について説明します。
ドメイン クラスの定義
ドメイン クラスはDSL の概念を表します。インスタンスは モデル要素 です。たとえば MusicLibrary の DSL の Album曲ドメインという名前のクラスがあります。
ドメイン クラスを作成するには[ツール] ENT0ENT から図にドラッグしクラスの名前を変更します。
詳細については、「ドメイン クラスのプロパティ」を参照してください。
各ドメイン クラスの埋め込みリレーションシップを作成します。
ルートのクラスが少なくとも 1 種類の埋め込みリレーションシップのターゲットである以外のドメイン クラスが埋め込みリレーションシップの対象であるクラスから継承されます。
モデルではモデル要素または関係を埋め込みの単一のツリーのノードです。埋め込みリレーションシップのソースとターゲットは親と子と呼ばれます。
ドメイン クラスの親を選択すると要素の有効期間に他の要素に依存しているするかによって異なります。ツリーのノードが削除されるとそのツリーは通常削除されます。したがって独立したプロシージャを持つ要素のクラスはルートのクラスの直下に埋め込まれます。
通常は別の要素内の要素を表示し所有者の関係が表示されるようにします。この場合最も適切な親クラスはコンテナー クラスです。例外はコンテナー内に表示される項目は独立した要素に実際に参照のリンクです。コンテナーを削除する場合は参照先は削除されません。
このトピックで説明する DSL 定義のパターンではコンテナーが削除されるときのコンテナー内に表示要素が削除されると想定しています。より複雑な設定が可能で規則を定義することにより実現できます。
要素の表示方法 |
クラスに埋め込みます () を拡張します。 |
DSL のソリューション テンプレートの例 |
---|---|---|
ダイアグラムの図形。 スイムレーン。 |
DSL のルートのクラス。 |
最小限の言語。 タスクのフロー : アクター クラス。 |
スイムレーンの図形。 |
スイムレーンとして表示される要素のドメイン クラス。 |
タスクのフロー : タスク クラス。 |
コンテナーが削除された項目が削除される図形のリスト項目。 図形のポート。 |
コンテナーの図形にマップされるドメイン クラス。 |
クラス図 : 属性クラス。 コンポーネント図: ポートのクラス。 |
コンテナーが削除されると項目のリスト削除されません。 |
DSL のルートのクラス。 リストは参照のリンクが表示されます。 |
|
直接表示されます。 |
このが一部を形成するクラス。 |
Music のライブラリの例ではアルバムは歌のタイトルを示す四角形として表示されます。したがってアルバムの親クラスはルートのの音楽で曲の親がアルバムです。
ドメイン クラスとして埋め込むことを作成し親クラスを選択するには[ツール] ENT0ENT のをクリックし図の空白部分をクリックします。
これらのクラス名を自動的に追跡するため埋め込みリレーションシップとロール名を調整する必要はありません。
詳細については、「ドメイン リレーションシップのプロパティ」および「ドメイン ロールのプロパティ」を参照してください。
[!メモ]
埋め込みは継承と同じではありません。埋め込みリレーションシップの子は親の機能を継承しません。
各ドメイン クラスに追加のドメインのプロパティ
ドメインのプロパティに格納された値。例を次に示します。: 名前タイトル発行日。
クラスで ENT0ENT [] をクリックしEnter キーを押してプロパティの名前を入力します。ドメインのプロパティの既定の型は文字列です。型を変更する場合はドメインでプロパティを選択し[ENT1ENT] ウィンドウの 種類 を設定します。で目的の型がドロップダウン リストに表示されていない場合は プロパティ型の追加 を参照してください。
**要素のプロパティを設定します。**言語のエクスプローラーの要素を識別するために使用できるドメインのプロパティを選択します。たとえば曲のドメイン クラスのタイトル ドメインのプロパティを選択できます。[ENT0ENT] ウィンドウでtrue に *** Is Element Name *** を設定します。
ドメインの派生クラスを作成します。
ドメイン クラスはプロパティとリレーションシップを継承するバリアントを使用する場合その派生クラスを作成します。たとえばアルバムは派生クラスの WMA と MP3 があります。
[入力] ENT3ENT のツールを使用すると派生クラスを作成します。
[入力] ENT1ENT ツールをクリックし派生クラスをクリックし基本クラスをクリックします。
抽象 に基本クラスの 継承修飾子 を設定することをお勧めします。場合もあります。必要な場合は基本クラスのインスタンスを代わりにこれらの派生クラスを作成することを検討して考えれば。
派生クラスは基本クラスのプロパティとロールを継承します。
ユース ケース図を片付けて定義します。
リレーションシップを追加する場合クラスには複数の場所に表示されます。外観の数を減らして図を広くするには関係の対象のクラスを右クリックしを ENT2ENT [] をクリックします。オブジェクトの影響にリレーションシップのターゲット クラスを右クリックし[ENT8ENT] をクリックします。これらのメニュー コマンドが表示されない場合はドメイン クラスだけが選択されていることを確認します。
ドメイン クラスとクラスの図形を移動するに CTRL+Up と CTRL+Down を使用します。
ドメイン クラスをテストします。
新しいドメイン クラスをテストするには
DSL のデザイナー コードを生成する 変換を ソリューション エクスプローラーのツール バーの すべてのテンプレート をクリックします 。この手順を自動化できます。詳細については、「方法: すべてのテンプレートを自動変換する」を参照してください。
**DSL をビルドして実行します。**実験モードで Visual Studio の新しいインスタンスを実行するにはF5 キーまたは Ctrl + F5 キーを押します。Visual Studio の実験用インスタンスでDSL のファイル名拡張子を持つファイルを開くかまたは作成します。
**エクスプローラーを開きます。**ダイアグラムに通常の YourLanguage エクスプローラーという言語のエクスプローラー ウィンドウです。このウィンドウが表示されない場合ソリューション エクスプローラーの下のタブにあります。[入力] ENT2ENT その他のウィンドウ にはメニューのを見つけることができません。YourLanguage エクスプローラー をクリックします。
エクスプローラーはモデルのツリー ビューが表示されます。
**新しい要素を作成します。**ルート上でノードを右クリックしを YourClass を ENT2ENT [] をクリックします。
クラスの新しいインスタンスが言語のエクスプローラーに表示されます。
新しいインスタンスを作成するときインスタンスごとに異なる名前がであることを確認します。これはがドメインのプロパティのフラグ *** Is Element Name *** ある場合にのみ発生します。
ドメインのプロパティを調べます。選択されているクラスのインスタンスに よってプロパティ ウィンドウを確認します。このドメイン クラスで定義したとドメインのプロパティに示す必要があります。
ファイルを保存し閉じて から再度開いてください。作成したすべてのインスタンスでノードを展開するとWindows エクスプローラーに表示されます。
ダイアグラムの図形の定義
四角形楕円アイコンとして図に表示される要素のクラスを定義できます。
ダイアグラムの図形として表示される要素のクラスを定義するには
ドメイン クラス定義に従ってドメイン クラスを定義し テスト します。
クラスの親クラスはルート必要があります。つまりそこにルートのクラスと新しいドメイン クラス間の関係に埋め込む必要があります。
ダイアグラムにスイムレーンがの場合親はスイムレーンにマップされているドメイン クラスです。この手順に従う前に スイムレーンを持つ DSL を定義します。 を参照してください。
モデル図の要素を表すする 図形のクラスを追加 します。ユース ケース図定義に次のツールの 1 つがからドラッグ :
*** Geometry Shape *** は四角形や楕円を提供します。
イメージ シェイプ では入力したイメージを表示します。
コンパートメント シェイプ は項目の一つ以上の一覧を含む四角形です。
シェイプとコネクタの下に DSL 定義図の右側に表示される図形のクラス名をに変更します。
イメージの図形を作成する場合はイメージを定義 します。
任意のサイズのイメージを作成します。BMPGIFJPEGEMF 形式がサポートされています。
ソリューション エクスプローラーでDsl \ リソースの下にソリューションに追加します。
DSL 定義図に戻り新しいイメージの図形クラスを選択します。
[プロパティ] ウィンドウでプロパティ ENT0ENT [] をクリックします。
[入力] ENT0ENT ダイアログ ボックスでドロップダウン メニューを ファイル名 のをクリックしイメージを選択します。
ドメインのプロパティを表示するためにテキストの図形にデコレータを追加します。
モデル要素の名前やタイトルを表示するには通常少なくとも 1 人のテキスト デコレータが必要です。
図形のクラスのヘッダーを右クリックし 追加 をポイントし[ENT2ENT] をクリックします。デコレータの[プロパティ] ウィンドウで名前を 位置 設定します。
表示するドメイン クラス図の要素にマップとの各図形を接続 します。
[入力] ENT2ENT ツールをクリックしドメイン クラスをクリックし図形内のクラスを選択します。
テキスト デコレータにプロパティを割り当てるします。
ドメイン クラス図での要素の割り当てを表す図形のクラスの灰色の行を選択します。
[ENT2ENT] ウィンドウで[ENT3ENT] タブをクリックします。[ENT0ENT] ウィンドウ[入力] ENT1ENT メニューでをポイント その他のウィンドウ 確認しENT3ENT [] をクリックします。コンテンツをすべて表示するにはこのペインの最上部を発生させることは多くの場合に必要です。
デコレータの名前を選択します。*** Display property *** の下にドメイン クラスのプロパティの名前を選択します。各デコレータのこの手順を繰り返します。
関連要素のプロパティを表示するには***** Path to display property ***** の下にあるドロップダウン ツリーのナビゲーターをクリックします。
チェック マークはデコレータの名前の横に表示されることを確認します。
ドメイン クラスの要素を作成するためのツールボックス項目を作成します。
*** DSL Explorer *** で[] ノード ENT11ENTすべてのサブノードを展開します。
DSL と同じ名前を持つ *** Toolbox Tabs *** のノード (など MusicLibrary 右クリックします。[ENT5ENT] をクリックします。
[!メモ]
[入力] ENT1ENT ノードを右クリックし*** Add Element Tool *** は表示されません。代わりに上位のノードをクリックします。
選択した新しい要素のツールを使用すると[プロパティ] ウィンドウで新しく追加したドメイン クラスに クラス を設定します。
キャプション と ヒント を設定します。
ツールボックスに表示されるアイコンに *** Toolbox Icon *** を設定します。既に別のツールで使用する新しいアイコンまたはアイコンに設定できます。
新しいアイコンを作成するには ソリューション エクスプローラー の Dsl \ リソースを開きます。既存の要素のツール BMP ファイルの 1 種類をコピーして貼り付けます。貼り付けたコピーの名前を変更しファイルを編集するダブルをクリックします。
DSL 定義の図にはツールを選択し[プロパティ] ウィンドウで *** Toolbox Icon *** で ENT1ENT [] をクリックします。[入力] ENT0ENT ダイアログ ボックスでドロップダウン メニューの .BMP ファイルを選択します。
詳細については、「ジオメトリ シェイプのプロパティ」および「イメージ シェイプのプロパティ」を参照してください。
図形をテストするには
DSL のデザイナー コードを生成する 変換を ソリューション エクスプローラーのツール バーの すべてのテンプレート をクリックします 。
**DSL をビルドして実行します。**実験モードで Visual Studio の新しいインスタンスを実行するにはF5 キーまたは Ctrl + F5 キーを押します。Visual Studio の実験用インスタンスでDSL のファイル名拡張子を持つファイルを開くかまたは作成します。
要素のツールがツールボックスに表示されることを確認します。
モデル図にツールからドラッグして 図形を作成 します。
各テキスト デコレータが表示され : ことを 確認します。
設定を *** Is UI Read Only *** ドメインのプロパティのフラグがない場合はそれを編集できます。
プロパティ ウィンドウまたはデコレータのプロパティを編集すると他のビューが更新されます。
最初に図形をテストした後はプロパティを調整しいくつかの高度な機能を追加することもあります。詳細については、「ドメイン固有言語のカスタマイズおよび拡張」を参照してください。
参照の関係の定義
すべてのソースのドメイン クラス間の関係の参照を定義しドメイン クラスを対象にしています。参照の関係は図形間の行である形式で図では通常表示します。
ダイアグラムの図形がこのアーティストをアルバムにリンク ArtistsAppearedOnAlbums という名前のリレーションシップを定義できるのでたとえば音楽をアルバムとアーティストが表示されます。図の例を参照してください。
参照リレーションシップは同じ型の要素をリンクできます。たとえば系譜を表す DSL にその親と子の関係はとから参照リレーションシップです。
参照の関係を定義します。
参照の関係ツールをクリックしリレーションシップのソースのドメイン クラスをクリックしターゲット ドメイン クラスをクリックします。ターゲット クラスはソース クラスと同じになります。
各リレーションシップ ボックスにリレーションシップの両側の行で表される 2 個のロールがあります。プロパティ ウィンドウの各ロールを選択しそのプロパティを設定できます。
ロール名を変更 してください。たとえばユーザーとの関係でユーザーなど親子マネージャーおよびの教師と Student既定の名前を変更する場合があります。
必要に応じて 各ロールの多重度を調整 します。各メンバーは最大 1 ビットのマネージャーを使用する場合 0..1 の図のマネージャーのラベルの下に表示される多重度を設定します。
**リレーションシップに追加のドメインのプロパティ。**図ではアーティスト アルバムのリレーションシップにロールのプロパティがあります。
同じクラスの複数のリンクはモデル要素のペアとの間にあることができる場合は リレーションシップの ENT11ENT [入力] プロパティの設定します。たとえば教師が同じメジャー バージョンに応じて複数教えるようにすることができます。
詳細については、「ドメイン リレーションシップのプロパティ」および「ドメイン ロールのプロパティ」を参照してください。
関係を表示するコネクタを定義します。
コネクタはモデル図の 2 種類の図形間に線が表示されます。
ユース ケース図に定義 ENT2ENT [入力] ツールをドラッグします。
コネクタのラベル テキストを表示する場合はデコレータを追加します。位置を設定します。ユーザーがテキスト デコレータの移動を許可するには [入力] ENT3ENT プロパティを設定します。
参照リレーションシップにコネクタのリンクに ENT3ENT [入力] ツールを使用します。
選択した図の要素がマップの ENT0ENT [入力] ウィンドウでを開き[入力] タブ ENT1ENT を開きます。
各 *** Decorator *** を選択し適切なドメインのプロパティに *** Display property *** を設定します。
チェック マークが ENT8ENT [入力] リスト内の各項目の横に表示されることを確認します。
接続ビルダー ツールを定義します。
[ENT0ENT] ウィンドウで[] ノード ENT1ENTすべてのサブ ノードを展開します。
DSL と同じ名前を持つ右クリックしを ENT4ENT [入力] ノードをクリックします。
新しいツール] をクリックすると[プロパティ] ウィンドウで :
キャプション と ヒント を設定します。
新しいリレーションシップに適したビルダーを ENT5ENT [] をクリックしをクリックします。
ツールボックスに表示するアイコンに *** Toolbox Icon *** を設定します。既に別のツールで使用する新しいアイコンまたはアイコンに設定できます。
新しいアイコンを作成するには ソリューション エクスプローラー の Dsl \ リソースを開きます。既存の要素のツール BMP ファイルの 1 種類をコピーして貼り付けます。貼り付けたコピーの名前を変更しファイルを編集するダブルをクリックします。
DSL 定義の図にはツールを選択し[プロパティ] ウィンドウで *** Toolbox Icon *** で ENT0ENT [] をクリックします。[入力] ENT12ENT ダイアログ ボックスでドロップダウン メニューの .BMP ファイルを選択します。
参照の関係およびコネクタをテストするには
DSL のデザイナー コードを生成する 変換を ソリューション エクスプローラーのツール バーの すべてのテンプレート をクリックします 。
**DSL をビルドして実行します。**実験モードで Visual Studio の新しいインスタンスを実行するにはF5 キーまたは Ctrl + F5 キーを押します。Visual Studio の実験用インスタンスでDSL のファイル名拡張子を持つファイルを開くかまたは作成します。
接続のツールがツールボックスに表示されることを確認します。
モデル図にツールからドラッグして 図形を作成 します。
図形間の 接続を作成 します。コネクタ ツールをクリックし図形をクリックして別のシェイプをクリックします。
**不適切なクラス間の接続を作成できないことを確認します。**たとえばリレーションシップがアルバムにアーティストの間にある場合はアーティストにアーティストをリンクできないことを確認します。
多重度が正しいことを確認します。 たとえば複数のマネージャーのユーザーに接続できないことを確認します。
各テキスト デコレータが表示され : ことを 確認します。
設定を *** Is UI Read Only *** ドメインのプロパティのフラグがない場合はそれを編集できます。
プロパティ ウィンドウまたはデコレータのプロパティを編集すると他のビューが更新されます。
最初にコネクタをテストした後はプロパティを調整しいくつかの高度な機能を追加することもあります。詳細については、「ドメイン固有言語のカスタマイズおよび拡張」を参照してください。
リストを含む図形を定義します : 図形のコンパートメント
図形コンパートメントには項目の一つ以上の一覧が表示されます。たとえば音楽のライブラリの DSL で音楽をアルバムに図形のコンパートメントを使用できます。各アルバムでは曲の一覧があります。
DSL 定義のこの効果を実現する最も簡単な方法はコンテナーの 1 種類のドメイン クラス各リストの 1 ドメイン クラスを定義します。コンテナー クラスは図形のコンパートメントにマップされます。
詳細については、「コンパートメント シェイプのプロパティ」を参照してください。
図形のコンパートメントを定義するには
コンテナーのドメイン クラスを作成 します。[入力] ENT2ENT ツールをクリックしモデルのルートのクラスをクリックしDSL 定義図の空白部分をクリックします。この例では図 Album ドメインという名前のクラスを作成します。
はルートのクラスに埋め込む代わりにスイムレーンにマップされるドメイン クラスのコンテナーを埋め込むことができます。
名前などのドメインのプロパティをクラスに追加し[プロパティ] ウィンドウで *** Is Element Name *** フラグを設定します。
リスト項目のドメイン クラスを作成 します。[入力] ENT3ENT ツールをクリックしアルバム コンテナー クラス () をクリックし図の空白部分をクリックします。この例では図 Song ドメインという名前のクラスを作成します。
タイトルなどのドメインのプロパティをクラスに追加し***** Is Element Name ***** フラグを設定します。
そのほかのドメインのプロパティを追加します。
表示する各リストのリスト項目のドメイン クラスを追加します。
リスト項目の種類を複数使用するには リスト クラスから継承するクラスを作成します。 継承修飾子 を設定してリスト クラスの抽象型にします。
たとえばクラシック音楽にアーティストではなくコンポーザーで並べ替えを実行する場合は曲 ClassicalSong と NonClassicalSong の 2 種類のサブクラスを作成できます。
図形のコンパートメントを作成 します。ユース ケース図に定義 ENT0ENT [入力] ツールをにドラッグします。
テキスト デコレータを追加しその名前を設定します。
コンパートメントを追加し名前を設定します。
ユーザーがリストのコンパートメントを非表示にすることができるようにするにはクラスの図形コンパートメントを右クリックし 追加 をポイントし[ENT1ENT] をクリックします。[プロパティ] ウィンドウでデコレータの位置を設定します。
[入力] ENT0ENT ツールをクリックしコンテナー クラスのドメインをクリックし図形のコンパートメントをクリックします。
ドメイン クラスと図形間の図の要素のマップのリンクをクリックします。[入力] ウィンドウの ENT0ENT:
[ENT0ENT] タブをクリックします。デコレータの名前をクリックし***** Display Property ***** で適切な項目を選択します。チェック マークがデコレータの名前の横に表示されることを確認します。
[ENT0ENT] タブをクリックします。
コンパートメント名をクリックします。
*** Displayed elements collection path *** の下にリストの要素に移動します (は歌)。ナビゲーター ツールを使用するにはドロップダウン矢印をクリックします。
*** Display Property *** のボックスの一覧に表示するプロパティを選択します。この例ではこれはタイトルです。
[!メモ]
デコレータのマップとコンパートメント マップでパス フィールドを使用してフィールドドメイン クラスとコンパートメントにより複雑な図形間にリレーションシップを作成できます。
図形を作成するためのツールを定義するには
ドメイン クラスの要素を作成するためのツールボックス項目を作成します。
*** DSL Explorer *** で[] ノード ENT1ENTすべてのサブノードを展開します。
DSL と同じ名前を持つ *** Toolbox Tabs *** のノード (など MusicLibrary 右クリックします。[ENT1ENT] をクリックします。
[!メモ]
[入力] ENT0ENT ノードを右クリックし*** Add Element Tool *** は表示されません。代わりに上位のノードをクリックします。
選択した新しい要素のツールを使用すると[プロパティ] ウィンドウで新しく追加したドメイン クラスに クラス を設定します。
キャプション と ヒント を設定します。
ツールボックスに表示されるアイコンに *** Toolbox Icon *** を設定します。既に別のツールで使用する新しいアイコンまたはアイコンに設定できます。
新しいアイコンを作成するには ソリューション エクスプローラー の Dsl \ リソースを開きます。既存の要素のツール .BMP ファイルの 1 種類をコピーして貼り付けます。貼り付けたコピーの名前を変更しファイルを編集するダブルをクリックします。
DSL 定義の図にはツールを選択し[プロパティ] ウィンドウで *** Toolbox Icon *** で ENT0ENT [] をクリックします。[入力] ENT0ENT ダイアログ ボックスでドロップダウン メニューから BMP ファイルを選択します。
図形のコンパートメントをテストするには
DSL のデザイナー コードを生成する 変換を ソリューション エクスプローラーのツール バーの すべてのテンプレート をクリックします 。
**DSL をビルドして実行します。**実験モードで Visual Studio の新しいインスタンスを実行するにはF5 キーまたは Ctrl + F5 キーを押します。Visual Studio の実験用インスタンスでDSL のファイル名拡張子を持つファイルを開くかまたは作成します。
ツールがツールボックスに表示されることを確認します。
モデル図にツールをドラッグします。図形が作成されます。
要素の名前が自動的に設定されているように既定されていることを確認します。
新しい図形のヘッダーを右クリックし[追加 リスト項目。 をクリックします。例ではコマンドは追加の曲です。
項目が一覧に表示され新しい名前がであることを確認します。
リスト項目の 1 つがをクリックし[プロパティ] ウィンドウを調べます。リスト項目のプロパティが表示されます。
言語のエクスプローラーを開きます。内部リスト項目のノードを持つコンテナー ノードが表示されることを確認します。
最初に図形のコンパートメントをテストした後は一部のプロパティを調整しいくつかの高度な機能を追加することもあります。詳細については、「ドメイン固有言語のカスタマイズおよび拡張」を参照してください。
コンパートメントの参照のリンクが表示されます。
通常コンパートメントに表示される要素は図形のコンパートメントによって表される要素の子です。ただし場合によっては参照リレーションシップで配列内のリンクされた要素を表示する必要になります。
たとえばアルバムにリンク アーティストの一覧を表示 AlbumShape に 2 番目のコンパートメントを追加できます。
この場合コンパートメントが参照先の要素ではなくリンクが表示されます。これはユーザーがコンパートメントの項目を選択しキーを削除するとリンクが削除されるのではなく参照先の要素です。
いずれにしても参照先の要素の名前をコンパートメントに表示できます。
次の手順はこのセクションで説明するように既にドメイン クラス参照リレーションシップコンパートメント図形と図の要素マップを作成していることを前提としています。
参照を表示するにはコンパートメントにリンク
図形のコンパートメントにコンパートメントを追加 します。DSL 定義図では図形のコンパートメントのクラスを右クリックし 追加 をポイントし[ENT1ENT] をクリックします。
ターゲット要素ではなくリンクに移動するに *** Displayed elements collection path *** を設定します。ドロップダウン メニューをクリックしターゲットの代わりに参照リレーションシップを選択するにはツリー ビューを使用します。例ではリレーションシップが ArtistAppearedOnAlbums です。
リンクからターゲット要素に移動するに *** Path to Display Property *** を設定します。この例ではこれはアーティストです。
ターゲット要素の名前などの適切なプロパティに *** Display Property *** を設定します。
すべてのテンプレートの変換 (&T) のビルドはDSL を実行しテスト モデルを開きます。
モデル図では図形の適切なクラスを作成しその名前を設定しその間のリンクを作成します。図形のコンパートメントではリンクされた要素の名前が表示されます。
図形のコンパートメントにリンクする項目を選択します。リンクと項目の両方を無効にする必要があります。
定義は別の図形の境界の移植します。
ポートは別の図形の境界にある図形です。
またユーザーがコネクタを描画できる別のシェイプにそれぞれコネクション ポイントを提供するために使用できます。この場合ポート シェイプを透明にすることができます。
DSL 新しいソリューションを作成するときにそのポートを使用する例については コンポーネント ダイアグラム テンプレートを選択します。この例ではポートを定義するときに考慮することは最終的にまとめたものです :
ポート コンテナーを表すドメイン クラスComponent があります。
ポートを表すドメイン クラスがあります。この例ではこれは ComponentPort です。
コンテナーのドメイン クラスからポートのドメイン クラスに埋め込むリレーションシップがあります。詳細については ドメイン クラスの定義 を参照してください。
ポートの種類に同じコンテナーに混在する場合はポートのドメイン クラスのサブクラスを作成できます。例ではInPort と OutPort は ComponentPort から継承します。
コンテナーのドメイン クラスはすべての種類の図形にマップできます。たとえばComponentShape です。詳細については 図形の定義 を参照してください。
ポートのドメイン クラスは形状を移植するにマップされます。ポート シェイプのクラスを分離するために派生クラスを割り当てることも1 種類のポート シェイプのクラスの基本クラスをマップします。
他の点でポート シェイプは 図形の定義 に説明されているように動作します。
詳細については、「ポート シェイプのプロパティ」を参照してください。
スイムレーンを持つ DSL を定義します。
スイムレーンが図内で水平または分割列です。スイムレーンは各モデル要素に対応します。DSL 定義はスイムレーンの要素に 1 個のドメイン クラスが必要です。
スイムレーンの DSL を作成する最良の方法は新しい DSL のソリューションを作成しタスクのフローのソリューション テンプレートを選択します。DSL 定義ではアクター クラスはスイムレーンにマップされるドメイン クラスです。プロジェクトに合わせてこの変更およびそのほかのクラス名をに変更します。
スイムレーン内の図形として表示されるクラスを追加するにはスイムレーンのクラスに埋め込む新しいクラス間の関係を作成します。スイムレーン ユーザーが 1 から別の場所までドラッグ要素にして各要素は特定のスイムレーン内に常にです。タスクのフローのソリューション テンプレートではFlowElement はスイムレーン クラスの子です。
スイムレーンとは関係なく図形として表示されるクラスを追加するにはルートのクラスに埋め込む新しいクラス間の関係を作成します。ユーザーはスイムレーンと外側の境界を越えて含んだ図にこれらのシェイプを任意置けますスイムレーン。タスクのフローのソリューション テンプレートではコメントはルート クラスの子です。
詳細については、「スイムレーンのプロパティ」を参照してください。
プロパティ型の追加
ドメイン列挙型とリテラル
ドメイン列挙型では複数のリテラル値を持つ型です。
ドメイン列挙型を追加するには***** DSL Explorer ***** モデルのルートを右クリックしを ENT3ENT [] をクリックします。要素は ENT1ENT [入力] ノードの下に *** DSL Explorer *** に表示されます。この要素は図に表示されません。
ドメイン列挙型列挙型のリテラルを追加するには***** DSL Explorer ***** ドメインの列挙型を右クリックしを ENT2ENT [] をクリックします。
既定では列挙型を持つプロパティは列挙体の 1 の値のみに一度に設定できます。ユーザーが必要な場合値の組み合わせがビット フィールド」 ~ 「設定できます。プログラマが列挙型の ENT0ENT [入力] プロパティの設定します。
外部の型
ドメインのプロパティの型を設定すると型を検索 ENT0ENT [入力] ドロップダウン リストで外部のタイプを追加する必要があります。たとえばSystem.Drawing.Color の種類を追加できます。
型を追加するにはDSL モデル エクスプローラーののルートを右クリックしを ENT1ENT [] をクリックします。[プロパティ] ウィンドウでColor の名前と System.Drawing に名前空間を設定します。この型は *** Domain Types *** の下に DSL のエクスプローラーに表示されます。ドメインのプロパティの型を設定するたびにそれを選択できます。
DSL のカスタマイズ
このトピックで説明する技術を使用してグラフィカル的な表記で読みやすい XML 形式とコードおよびそのほかの成果物を生成するために必要な基本的なツールと DSL を作成できます。
DSL 定義を拡張する 2 とおりの方法があります :
DSL 定義の機能を使用してDSL を最適化します。たとえばコネクタの種類を複数作成する 1 要素を削除すると関連する要素を削除する規則を制御する単一のコネクタ ツールが行われます。これらの手法はDSL 定義の値によってほぼ実行されますがプログラム コードの行が必要です。
詳細については、「ドメイン固有言語のカスタマイズおよび拡張」を参照してください。
プログラム コードの高度な効果を使用してモデリング ツールを拡張します。たとえばモデルを変更できる複数の DSL を統合するツールを作成するメニュー コマンドを作成します。VMSDK にはDSL 定義から生成されたコードの拡張機能を統合しやすくするように設計されています。詳細については、「ドメイン固有言語をカスタマイズするコードの記述」を参照してください。
DSL シグネチャの変更
DSL 定義の項目の作成時にの既定値が自動的に設定されます。これらを設定するとユーザーが変更できます。これは強力なカスタマイズを有効にすると DSL の開発を簡素化します。
たとえば要素に図形を割り当てるとマッピングの親要素のパスはドメイン クラスの埋め込みリレーションシップに基づいて自動的に設定されます。ただし変更後の埋め込みリレーションシップ親要素のパス自動的に変更する。
したがって定義を保存したりすべてのテンプレートを変換すると DSL 定義のいくつかの関係を変更するといずれかを報告するとエラーになりますがよくことに注意してください。これらのエラーの修正が最も簡単です。エラーの位置を確認するために各エラー レポートをクリックします。
「方法: ドメイン固有言語の名前空間を変更する」も参照してください。
トラブルシューティング
次の表はDSL を定義するときにソリューションの推奨事項とともに発生する一般的な問題の一部を示します。詳細に説明はで使用できます。Visualization Tools Extensibililty Forum
問題 |
対処方法 |
---|---|
との DSL の定義ファイルで行った変更は無効です。 |
ソリューション エクスプローラーの上部にあるツール バーの [ENT0ENT] をクリックしてソリューションをビルドし直します。 |
図形はプロパティ値の代わりにデコレータの名前が表示されます。 |
デコレータのマッピングを設定します。DSL 定義とドメイン クラス図では図形のクラスの灰色の行にある図の要素マップをクリックします。 [入力] ENT0ENT ウィンドウを開きます。 その他のウィンドウ への参照はメニューのを確認できず ENT1ENT [] をクリックします。 [ENT0ENT] タブをクリックします。デコレータの名前を選択します。その横のボックスがオンになっていることを確認します。*** Display property *** でドメインにプロパティの名前を選択します。 詳細については ダイアグラムの図形 を参照してください。 |
DSL のエクスプローラーで [コレクションに追加することはできません。たとえばとのツールを右クリックするとメニューに追加のツール 「」のコマンドはありません。 My DSL のエクスプローラーで [リストに要素を追加することはできません。 |
使用しようとしているノードの上の項目を右クリックします。リストに追加するときに追加のコマンドはリスト ノードには所有者にありません。 |
今日はドメイン クラスを作成した [言語のエクスプローラーのインスタンスを作成できません。 |
ルートを除くすべてのドメイン クラスは埋め込みリレーションシップのターゲットである必要があります。 |
My DSL のエクスプローラーで要素は型の名前にのみ表示されます。 |
DSL 定義ではクラスのプロパティとプロパティ ウィンドウのドメインのプロパティを true に設定します *** Is Element Name *** を選択します。 |
My DSL が XML エディターに常に表示されます。 |
このエラーはファイルが読み取り中に発生することがあります。ただしそのエラーを変更してもDSL のデザイナーに明示的にエディターをリセットする必要があります。 プロジェクト項目を右クリックしYourLanguage*** Designer (Default) *** を ENT0ENT [] をクリックしをクリックします。 |
My DSL ツール ボックスをアプリケーションがアセンブリ名を変更した後に表示されません。 |
検査および詳細についてはDslPackage\GeneratedCode\Package.tt を更新して方法: ドメイン固有言語の名前空間を変更する を参照してください。 |
My DSL ツール ボックスは表示されませんが今日はアセンブリ名が変更されていません。 またはメッセージ ボックスに拡張機能を読み込むエラーを報告します。 |
の実験用のインスタンスをリセットしてソリューションをビルドし直します。
|