モデル、クラス、およびリレーションシップについて
ドメイン固有言語で (DSL) 記述したいたカスタム プログラム コードとともに DSL の定義ファイルによっています。 DSL のソリューションのプログラム コードのほとんどはこのファイルから生成されます。
このトピックではDSL 定義の中心的な機能について説明します。
DSL 定義
Dsl\DslDefinition.dsl を開くとVisual Studio のウィンドウは次の図のようになります。
DSL 定義の最も重要な情報は DSL 定義図に表示されます。 または DslDefinition.dsl の一部である追加情報は図の端に表示される DSL のエクスプローラーに表示されます。 最も頻繁なタスクの図と高度なカスタマイズの DSL のエクスプローラーで動作します。
DSL 定義の図はモデル要素を定義するとモデル要素間のリンクの関係を定義するドメイン クラスを示します。 またユーザーがモデル要素を表示するために使用するシェイプとコネクタを示します。
図または DSL のエクスプローラーの DSL 定義の項目を選択するとそれに関する情報がプロパティ ウィンドウに表示されます。 詳細についてはDSL の詳細] ウィンドウに表示される場合があります。
DSL モデルはのインスタンスです。
モデルは ユーザーが作成した DSL のインスタンスです。 モデルが定義されているユーザー定義のドメイン リレーションシップのインスタンスか要素間のリンクのドメイン クラスのインスタンスであるモデル要素について説明します。 モデルはモデル要素と図のリンクを表示するコネクタ使用できますが図形。 DSL 定義は図形のクラスが含まれますがコネクタは図のクラスします。
DSL 定義は ドメイン モデル です。 DSL の定義またはドメイン モデルはモデルがドメイン固有言語ランタイムのインスタンスでありドメイン固有言語のデザイン時の表現です。
ドメイン クラスはモデル要素を定義します。
ドメイン クラスがドメインのさまざまな要素の作成に使用されるドメイン リレーションシップは要素間のリンクです。 これらはモデルを生成するとデザイン固有の言語のユーザーによってインスタンス化されるリンクおよび要素のデザイン時の表現です。
この図は音楽のライブラリの DSL のユーザーが作成したモデルを示します。 Music をアルバムは歌の一覧を含むボックスで表されます。 アーティストは角の丸い付けられたボックスで表され関係するアルバムに接続されます。
DSL 定義は 2 個の要素を区切ります。 モデル図のモデル要素の外観は図形のクラスおよびコネクタのクラスを使用して定義されます。 情報はドメイン クラスとドメイン リレーションシップを使用してモデルを定義運びましたされます。
次の図は音楽のライブラリの DSL のドメイン クラス定義や関係を示します。
図には4 種類のドメイン クラスを示しています : Musicアルバム アーティストと曲。 ドメイン クラスは名前タイトルなどのドメインのプロパティを定義します。 インスタンスのモデルではこれらのプロパティの一部の値は図に表示されます。
ドメイン クラス間のリレーションシップです : MusicHasAlbumsMusicHasArtistsAlbumbHasSongs と ArtistAppearedOnAlbums。 リレーションシップに 1..10 などの多重度があります。*。 たとえば曲は AlbumHasSongs のリレーションシップによって1 桁をアルバムに関連する必要があります。 アルバムは曲数を指定できます。
ユース ケース図の再配置定義
アルバムがこの図のようにドメイン クラス図のユース定義を数回使用できることに注意してください。 1 種類の主要なビューが常にであり 参照の ビューがあります。
ユース ケース図を定義するには再配置できます :
*** Bring Tree Here *** と *** Split Tree *** のコマンドを使用してメイン アセンブリと参照のビューをスワップしてください。 これらのコマンドを表示するにはシングル ドメイン クラスを右クリックします。
Ctrl+Up と Ctrl+Down を押すとドメイン クラスとクラスの図形の順序を変更します。
シェイプの右上隅のアイコンを使用してクラスを折りたたんだり展開します。
ドメイン クラスで記号をクリックするとツリーの一部 (-) を折りたたみます。
継承
ドメイン クラスは継承を使用して定義できます。 継承の派生を作成するには継承ツールをクリックし派生クラスをクリックし基本クラスをクリックします。 モデル要素の基本クラスから継承したすべてのプロパティとともに定義された独自のドメイン クラスであるすべてのプロパティがあります。 また関係のロールを継承します。
継承は関係シェイプとコネクタの間で使用できます。 継承は同じグループ内に保持する必要があります。 図形にはドメイン クラスを継承できません。
ドメイン リレーションシップ
モデル要素または関係によってリンクできます。 リンクはバイナリでは; は2 個の要素を正確にリンクします。 ただし要素が他のオブジェクトには多くのリンクがある要素のペアとの間に複数のリンクがあります。
要素の異なるクラスを定義できるようにリンクの各クラスを定義できます。 リンクのクラスは ドメイン リレーションシップと 呼ばれます。 ドメイン リレーションシップは要素のクラス インスタンスに接続を指定します。 関係の両端は ロールと 呼ばれドメイン リレーションシップは 2 個のロールに加えてリレーションシップ自体の名前を定義します。
2 種類のドメイン リレーションシップがあります : リレーションシップおよび参照リレーションシップを埋め込むこと。 リレーションシップを埋め込むユース ケース図の各定義で塗りつぶされたロールを持つ参照リレーションシップに破線があります。
リレーションシップの埋め込み
モデル内の要素はルートの場合を除き1 文字を埋め込むリンク先があります。 したがって埋め込みの単一のツリー リンクはモデル全体のフォーム。 埋め込みリレーションシップは包含または所有権を表します。 このように関連付けられた 2 種類のモデル要素は親と子です。 親は子に埋め込むと呼ばれます。
リンクを埋め込んで図の形式で明示的に表示されません。 代わりにコンテインメントによって表されます。 モデルのルートは図によって表されそのアプリケーションに埋め込まれている要素はダイアグラムの図形として表示されます。
例ではルート クラスの音楽に曲に埋め込む AlbumHasSongs を持つアルバムに埋め込む関係 MusicHasAlbums があります。 曲はアルバム内のリスト項目として表示されます。 Music にインスタンスをダイアグラムの図形として表示アーティストのクラスに埋め込む MusicHasArtists があります。
既定では埋め込み要素が自動的にその親が削除されるときに削除されます。
モデルが XML 形式でファイルに保存すると要素は親の内部でシリアル化のカスタマイズは入れ子になります。
注意
埋め込みは継承と同じではありません。埋め込みリレーションシップの子は親のプロパティを継承しません。埋め込むとモデル要素間のリンクの種類です。継承はクラス間の関係のモデル要素間のリンクを作成しません。
規則を埋め込みます。
インスタンスのモデルの要素がモデルのルートを除き1 桁の埋め込みリンク先である必要があります。
したがって非抽象クラスのドメインはルート以外のクラス1 文字以上の埋め込みリレーションシップのターゲットである必要がありますか基本クラスから埋め込むことを継承する必要があります。 クラスは複数の埋め込みアイテムの対象である場合はインスタンスのモデルの要素は 1 個の親が一度だけに含めることができます。 ターゲットからソースへの多重度は 0..1 または 1..1 なります。
エクスプローラーは埋め込むツリーが表示されます
DSL 定義はユーザーがモデル図の横にあるエクスプローラーを作成します。
エクスプローラーでは図形を定義していないモデルのすべての要素を示しています。 この要素は要素を埋め込む関係なく参照の関係を示します。
要素のドメインのプロパティの値を確認するにはユーザーはモデル要素を図またはモデル エクスプローラーで選択し[プロパティ] ウィンドウを開きます。 これは図に表示されないものも含めてすべてのドメインのプロパティを表示します。 この例では各曲はタイトルおよびとの両方がありますがタイトルの値だけがダイアグラムに示します。
参照の関係
参照の関係は埋め込みいない種類の関係を表します。
参照の関係は図形間の形式で図では通常表示されます。
モデルの XML 表現では2 種類の要素間の参照のリンクは モニカー を使用して表されます 。つまりモニカーはモデルの各要素を一意に識別する名前です。 各モデル要素の XML ノードはリレーションシップの名前およびそのほかの要素のモニカーを指定するノードが含まれています。
ロール
すべてのドメイン リレーションシップに 2 個のロールロールのソースとターゲットのロールがあります。
次の図では発行者のドメイン クラスと PublisherCatalog のドメイン リレーションシップ間の行はソースの役割です。 ドメイン リレーションシップとアルバムのドメイン クラスの行はターゲットの役割です。
リレーションシップに関連付けられた名前はモデルを走査するプログラム コードを記述する場合に重要です。 たとえばDSL のソリューションをビルドすると生成されたクラスの発行者がアルバムのコレクションであるプロパティのカタログがあります。 クラスをアルバムにクラスの発行者の一つのインスタンスであるプロパティの発行者があります。
DSL 定義に関係を作成する際にプロパティとリレーションシップの名前は既定値が指定されます。 ただしユーザーが変更できます。
(Multiplicity
多重度は要素がドメイン リレーションシップで同じロールを持つことを指定します。 例ではゼロの数 (0。*) カタログのロールの多重度設定機能を使用すると発行者のドメイン クラスのインスタンスが同じ数の PublisherCatalog の関係のリンクがあることを指定します。
図の入力または Multiplicity のプロパティを変更することで[出力] ウィンドウ ENT0ENT のロールの多重度を設定します。 次の表はこのプロパティの設定を示します。
多重度を示します |
Description |
---|---|
0。* (多くの場合) |
ドメイン クラスの各インスタンスはリレーションシップの関係またはインスタンスの複数のインスタンスを持つことができません。 |
0..1 () の 1) |
ドメイン クラスの各インスタンスはリレーションシップの関係またはインスタンスの複数のインスタンスを持つことができません。 |
1..1 (1 文字) |
ドメイン クラスの各インスタンスはリレーションシップの 1 種類のインスタンスを持つことができます。 ロールのクラスのインスタンスからこのリレーションシップの複数のインスタンスを作成できません。 検証を有効にすると検証エラーはロールのクラスのインスタンスにはリレーションシップのインスタンスが存在しない場合に表示されます。 |
1. * (1 または多数) |
この多重度があるロールのクラスの各インスタンスはリレーションシップの 1 回以上のインスタンスが必要です関係の複数のインスタンスと各インスタンスを持つことができます。 検証を有効にすると検証エラーはロールのクラスのインスタンスにはリレーションシップのインスタンスが存在しない場合に表示されます。 |
クラスとしてドメイン リレーションシップ
リンクは ModelElement の派生クラスである LinkElement のインスタンスとしてストアで表されます。 ドメイン リレーションシップのドメイン モデルの図でこれらのプロパティを定義できます。
他のリレーションシップのリレーションシップにソースまたはターゲットにできます。 ドメイン モデルにおいてドメイン リレーションシップを右クリックしを ENT0ENT [] をクリックします。 他のクラス ボックスが表示されます。 その後にリレーションシップを接続できます。
ドメインクラスと同様に継承してリレーションシップを部分的に定義できます。 派生関係を選択し[プロパティ] ウィンドウで *** Base Relationship *** を設定します。
派生関係は基本関係を特化します。 派生するリンクまたは基本関係によってリンクされたクラスと同様にドメイン クラス。 派生関係のリンクはモデルで作成する場合は派生した基本関係のインスタンスです。 プログラム コードで基本クラスまたは派生クラスでプロパティを使用してリンクの反対側に生成される移動できます。
参照
概念
[リダイレクト] 生成済み API におけるドメイン リレーションシップ