プログラム コードにおけるレイヤー モデル内の移動およびレイヤー モデルの更新
このトピックでは、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) は、レイヤー モデル (ILayerModel) に含めることも、別の ILayer 内に入れ子にすることもできます。
コメントまたはレイヤーを作成するには、適切なコンテナーの作成メソッドを使用します。
依存関係リンク
依存関係リンクはオブジェクトによって表されます。どちらの方向にも移動できます。
依存関係リンクを作成するには、source.CreateDependencyLink(target) を呼び出します。
コメント
コメントはレイヤーまたはレイヤー モデルの内部に含めることができ、任意のレイヤー要素にリンクすることもできます。
コメントは任意の数の要素にリンクできます。0 でもかまいません。
レイヤー要素にアタッチされたコメントを取得するには、次のようにします。
ILayerModel model = diagram.GetLayerModel();
IEnumerable<ILayerComment> comments =
model.Comments.Where(comment =>
comment.Links.Any(link => link.Target == layerElement));
注意 |
---|
ILayer の Comments プロパティは、ILayer に含まれるコメントを取得します。自身にリンクされているコメントは取得しません。 |
コメントを作成するには、適切なコンテナーで CreateComment() を呼び出します。
リンクを作成するには、コメントで CreateLink() を使用します。
レイヤー要素
モデルに含めることができる要素の種類はすべて、レイヤー要素です。
プロパティ
各 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) ... }}
IShape および IDiagram は、UML モデルの表示にも使用されます。詳細については、「方法: 図にモデルを表示する」を参照してください。