次の方法で共有


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

このトピックでは、Visual Studio Ultimate にプログラム コードを使用して移動および更新できるレイヤー モデルでの要素と関係について説明します。

ユーザーから見たレイヤー図の詳細については、「レイヤー図: リファレンス」および「レイヤー図: ガイドライン」を参照してください。

このトピックで説明する Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer モデルは Microsoft.VisualStudio.GraphModel の一般的なモデルのはファサードです。メニュー コマンドまたはジェスチャ拡張機能を作成する場合、Layer モデルを使用します。検証拡張機能をレイヤー化します。を作成する場合は、GraphModelを使用する方が簡単です。

トランザクション

モデルを更新するときは、変更を ILinkedUndoTransaction 内に収めることを検討します。このようにすると、変更が 1 つのトランザクションにまとまります。いずれかの変更が失敗した場合、トランザクション全体がロールバックされます。ユーザーが変更を元に戻す場合は、すべての変更が一緒に元に戻されます。

詳細については、「方法: トランザクションを使用してモデルの更新をリンクする」を参照してください。

using (ILinkedUndoTransaction t =
        LinkedUndoContext.BeginTransaction("a name"))
{ 
    // Make changes here ....
    t.Commit(); // Don't forget this!
}

コンテインメント

ILayer および ILayerModel は両方とも ILayer を含めることができます。

レイヤー (ILayer) およびレイヤー モデル (ILayerModel) は、コメントとレイヤーを含むことができます。

レイヤー (ILayer) は、レイヤー モデル (ILayerModel) に含めることも、別の ILayer 内に入れ子にすることもできます。

コメントまたはレイヤーを作成するには、適切なコンテナーの作成メソッドを使用します。

依存関係リンク

依存関係リンクはオブジェクトによって表されます。どちらの方向にも移動できます。

ILayerDependencyLink は 2 つの ILayer を接続します。

依存関係リンクを作成するには、source.CreateDependencyLink(target) を呼び出します。

コメント

コメントはレイヤーまたはレイヤー モデルの内部に含めることができ、任意のレイヤー要素にリンクすることもできます。

任意のレイヤー要素にコメントを添付できます。

コメントは任意の数の要素にリンクできます。0 でもかまいません。

レイヤー要素にアタッチされたコメントを取得するには、次のようにします。

ILayerModel model = diagram.GetLayerModel(); 
IEnumerable<ILayerComment> comments = 
   model.Comments.Where(comment => 
      comment.Links.Any(link => link.Target == layerElement));
Caution メモ注意

ILayer の Comments プロパティは、ILayer に含まれるコメントを取得します。自身にリンクされているコメントは取得しません。

コメントを作成するには、適切なコンテナーで CreateComment() を呼び出します。

リンクを作成するには、コメントで CreateLink() を使用します。

レイヤー要素

モデルに含めることができる要素の種類はすべて、レイヤー要素です。

レイヤー図のコンテンツは ILayerElement です。

プロパティ

各 ILayerElement には Properties という名前の文字列ディクショナリがあります。このディクショナリを使用して、任意の情報をレイヤー要素にアタッチできます。

成果物参照

成果物参照 (ILayerArtifactReference) は、レイヤーと、ファイル、クラス、フォルダーなどのプロジェクト アイテムの間のリンクを表します。ユーザーがソリューション エクスプローラーまたはアーキテクチャ エクスプローラーからレイヤー図にアイテムをドラッグして、レイヤーの作成またはレイヤーへの追加を行うと、成果物が作成されます。任意の数の成果物参照を、1 つのレイヤーにリンクできます。

レイヤー エクスプローラーの各行には成果物参照が表示されます。詳細については、「コードからのレイヤー図の作成」を参照してください。

成果物参照に関するプリンシパル型とメソッドは次のとおりです。

ILayerArtifactReference.Categories プロパティは、参照されている成果物の種類 (クラス、実行可能ファイル、アセンブリなど) を示します。Categories により、Identifier がターゲット成果物を示す方法が決まります。

CreateArtifactReferenceAsync は、Project または ProjectItem から成果物参照を作成します。これは非同期操作です。したがって、通常は、作成が完了すると呼び出されるコールバックを指定します。

レイヤーの成果物参照を、ユース ケース図の成果物と混同しないでください。

図形と図

レイヤー モデル内の各要素を表すには、ILayerElement および IShape という 2 つのオブジェクトが使用されます。IShape は、図での図形の位置とサイズを表します。レイヤー モデルでは、すべての ILayerElement には 1 つの IShape があり、レイヤー図上のすべての IShape には ILayerElement があります。IShape は UML モデルにも使用されます。したがって、すべての IShape にレイヤー要素があるわけではありません。

同様に、ILayerModel は 1 つの IDiagram に表示されます。

カスタム コマンドまたはジェスチャ ハンドラーのコードでは、現在の図および図形の現在の選択項目を、DiagramContext のインポートから取得できます。

public class ... {
[Import]
    public IDiagramContext DiagramContext { get; set; }
...
public void ... (...) 
{ IDiagram diagram = this.DiagramContext.CurrentDiagram;
  ILayerModel model = diagram.GetLayerModel();
  if (model != null)
  { foreach (ILayer layer in model.Layers) { ... }}
  foreach (IShape selected in diagram.SelectedShapes)
  { ILayerElement element = selected.GetLayerElement();
    if (element != null) ... }}

各 ILayerElement は IShape で表されます。

IShape および IDiagram は、UML モデルの表示にも使用されます。詳細については、「方法: 図にモデルを表示する」を参照してください。

参照

概念

レイヤー図へのコマンドおよびジェスチャの追加

レイヤー図へのカスタム アーキテクチャ検証の追加

レイヤー図へのカスタム プロパティの追加

レイヤー図: リファレンス

レイヤー図: ガイドライン

UML モデルと図の拡張