コードからの依存関係図の作成
ソフトウェア システムの高レベルな論理アーキテクチャを視覚化するには、Visual Studio で依存関係図を作成します。 コードがこの設計と一致していることを確認するには、依存関係図を使用してコードを検証します。 Visual C# プロジェクトと Visual Basic プロジェクトの依存関係図を作成できます。 この機能をサポートする Visual Studio のバージョンを確認するには、「アーキテクチャとモデリング ツールのエディション サポート」を参照してください。
依存関係図を使用すると、Visual Studio のソリューション項目を整理して、"レイヤー" と呼ばれる論理的、抽象的なグループにまとめることができます。 レイヤーを使用して、これらの成果物が実行する主要タスク、またはシステムの主要コンポーネントを示すことができます。
各レイヤーには、より詳細なタスクを示す別のレイヤーを含めることができます。 また、レイヤー間の目的のまたは既存の "依存関係" も指定できます。 矢印で表されるこれらの依存関係は、他のレイヤーが表す機能を使用する、または使用できるレイヤーを示します。 コードのアーキテクチャ コントロールを保持するには、目的の依存関係を図で示し、図と照らし合わせてコードを検証します。
依存関係図を作成する
依存関係図を作成する前に、ソリューションにモデリング プロジェクトがあることを確認します。
重要
既存の依存関係図を、あるモデリング プロジェクトから別のモデリング プロジェクト、またはソリューション内の別の場所に追加、ドラッグ、またはコピーしないでください。 これで、図を変更しても、元の図からの参照が保持されます。 また、これによってレイヤー検証が正しく機能しないため、要素が欠落したり、図を開こうとすると他のエラーが発生するなど、別の問題が生じる可能性があります。
代わりに、新しい依存関係図をモデリング プロジェクトに追加してください。 元の図から新しい図へ要素をコピーします。 モデリング プロジェクトと新しい依存関係図の両方を保存します。
新しい依存関係図をモデリング プロジェクトに追加する
Note
.NET Core プロジェクトの依存関係図は、Visual Studio 2019 バージョン 16.2 以降でサポートされています。
[アーキテクチャ] メニューの [新しい依存関係図] をクリックします。
[テンプレート] で [依存関係図] を選択します。
図に名前を付けます。
[モデリング プロジェクトへの追加] で、ソリューション内の既存のモデリング プロジェクトを参照して選択します。
または
[新しいモデリング プロジェクトを作成します] をクリックして、新しいモデリング プロジェクトをソリューションに追加します。
注意
依存関係図はモデリング プロジェクト内に存在している必要があります。 ただし、ソリューション内のどの場所にある項目にもリンクできます。
必ず、モデリング プロジェクトと依存関係図の両方を保存してください。
コード マップからのドラッグ アンド ドロップ (コピーと貼り付け)
[アーキテクチャ] メニューを使用して、ソリューションのコード マップを生成します。
製品コードに依存関係を適用するだけの場合は、ソリューション フォルダーと "テスト アセット" を削除するコード マップ フィルターを適用することを検討してください。
生成されたコード マップで、名前空間の依存関係を適用するかどうかに応じて、"外部" ノードを削除するか、外部アセンブリを表示するように展開します。 コード マップから不要なアセンブリを削除します。
[アーキテクチャ] メニューを使用して、ソリューションの新しい依存関係図を作成します。
コード マップ上のすべてのノードを選択します (Ctrl + A を使用するか、Shift キーを押しながらクリックし、ドラッグして離します)。
選択した要素を新しい依存関係検証ダイアグラムにドラッグ アンド ドロップするか、コピーして貼り付けます。
これは、現在のアプリのアーキテクチャを示しています。 アーキテクチャをどのようにするかを決定し、それに応じて依存関係図を変更します。
成果物からレイヤーを作成する
レイヤーは、プロジェクト、コード ファイル、名前空間、クラス、メソッドなど、Visual Studio ソリューションの項目から生成できます。 これにより、レイヤーと項目の間のリンクが自動的に作成され、レイヤー検証プロセスに含まれます。
Word 文書や PowerPoint プレゼンテーションなど、検証をサポートしていない項目にレイヤーをリンクできます。 これにより、レイヤーを仕様またはプランに関連付けることができます。 複数のアプリが共有するプロジェクトのファイルにレイヤーをリンクすることもできます。ただし、これらのレイヤーは検証プロセスには含まれず、"レイヤー 1"、"レイヤー 2" などの汎用名で表示されます。
リンクされた項目が検証をサポートしているかどうかを確認するには、レイヤー エクスプローラーを開き、項目の [検証をサポート] プロパティを調べます。 「成果物へのリンクの管理」を参照してください。
To | こちらの手順に従ってください |
---|---|
1 つの成果物を表すレイヤーを生成する |
重要: バイナリ ファイルを依存関係図にドラッグしても、モデリング プロジェクトへの参照は自動的には追加されません。 検証するバイナリ ファイルを手動でモデリング プロジェクトに追加します。 バイナリ ファイルをモデリング プロジェクトに追加するには
|
選択したすべての成果物を表す 1 つのレイヤーを生成する | すべての成果物を同時に依存関係図へドラッグします。 レイヤーが図に表示され、すべての成果物にリンクされます。 |
選択した各成果物を表すレイヤーを生成する | Shift キーを押しながら、すべての成果物を同時に依存関係図へドラッグします。 注:Shift キーを使用して項目の範囲を選択する場合は、成果物を選択した後でキーを離します。 成果物を図にドラッグするときは、キーを再び押して、押したままにします。 各成果物を表すレイヤーが図に表示され、各成果物にリンクされます。 |
成果物をレイヤーに追加する | 成果物をレイヤーにドラッグします。 |
リンクされない新しいレイヤーを生成する | ツールボックスで、 [依存関係ダイアグラム] セクションを展開し、レイヤーを依存関係図にドラッグします。 複数のレイヤーを追加するには、ツールをダブルクリックします。 完了したら、 [ポインター] ツールを選択するか、Esc キーを押します。 または 依存関係図のショートカット メニューを開き、 [追加] をクリックし、 [レイヤー] を選択します。 |
入れ子になったレイヤーを生成する | 既存のレイヤーを別のレイヤー上へドラッグします。 または レイヤーのショートカット メニューを開き、 [追加] を選択し、 [レイヤー] を選択します。 |
複数の既存レイヤーを含む新しいレイヤーを生成する | レイヤーを選択し、選択用のショートカット メニューを開き、 [グループ] を選択します。 |
レイヤーの色を変更する | レイヤーの [カラー] プロパティを任意の色に設定します。 |
レイヤーに関連付けられている成果物を、指定した名前空間に所属しないように指定する | レイヤーの [禁止された名前空間] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。 |
レイヤーに関連付けられている成果物が、指定した名前空間に依存できないように指定する | レイヤーの [禁止された名前空間の依存関係] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。 |
レイヤーに関連付けられている成果物を、指定した名前空間のいずれかに必ず所属させるように指定する | レイヤーの [必要な名前空間] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。 |
レイヤーの数字は、レイヤーにリンクされている成果物の数を示します。 ただし、この数値を読み取るときには、次の点に注意してください。
1 つのレイヤーが他の成果物を含む 1 つの成果物にリンクされているが、他の成果物に直接リンクされていない場合、その数字にはリンクされた成果物のみが含まれます。 ただし、レイヤー検証時の分析にはそれらの他の成果物も含まれます。
たとえば、1 つのレイヤーが 1 つの名前空間にリンクされている場合、その名前空間に複数のクラスが含まれていても、リンクされた成果物の数は 1 です。 レイヤーに名前空間の各クラスへのリンクもある場合、その数字にはリンクされたクラスが含まれます。
1 つのレイヤーに成果物にリンクされた他のレイヤーが含まれている場合は、そのコンテナー レイヤーの数字にそれらの成果物が含まれていなくても、コンテナー レイヤーはそれらの成果物にリンクされます。
レイヤーと成果物の間のリンクを管理する
依存関係図で、レイヤーのショートカット メニューを開き、 [リンクの表示] をクリックします。
レイヤー エクスプローラーに、選択したレイヤーに関する成果物のリンクが表示されます。
これらのリンクを管理するには、次の操作を行います。
To | レイヤー エクスプローラーでの操作 |
---|---|
レイヤーと成果物のリンクを削除する | 成果物のリンクのショートカット メニューを開き、 [削除] をクリックします。 |
リンクを別のレイヤーに移動する | 成果物のリンクを図上の既存のレイヤーにドラッグします。 または 1. 成果物のリンクのショートカット メニューを開き、[切り取り] を選択します。 2. 依存関係図で、レイヤーのショートカット メニューを開き、[貼り付け] を選択します。 |
リンクを別のレイヤーにコピーする | 1. 成果物のリンクのショートカット メニューを開き、[コピー] を選択します。 2. 依存関係図で、レイヤーのショートカット メニューを開き、[貼り付け] を選択します。 |
既存の成果物のリンクから新しいレイヤーを生成する | 成果物のリンクを図上の空白領域にドラッグします。 |
リンクされた成果物で依存関係図に対する検証がサポートされていることを確認する | 成果物のリンクの [検証をサポート] 列を調べます。 |
既存の依存関係をリバース エンジニアリングする
依存関係が存在するのは、あるレイヤーに関連付けられている成果物が、別のレイヤーに関連付けられている成果物を参照している場合です。 たとえば、あるレイヤー内のクラスが、別のレイヤー内のクラスを保持する変数を宣言する場合などです。 図のレイヤーにリンクされている成果物の既存の依存関係はリバース エンジニアリングできます。
Note
成果物の種類によっては、依存関係をリバース エンジニアリングできないものもあります。 たとえば、テキスト ファイルにリンクされているレイヤーから、またはそのレイヤーに対して依存関係をリバース エンジニアリングすることはできません。 リバース エンジニアリングできる依存関係のある成果物を確認するには、1 つ以上のレイヤーのショートカット メニューを開き、 [リンクの表示] をクリックします。 レイヤー エクスプローラーで、 [検証をサポート] 列を調べます。 この列に [False] と表示されている成果物については、依存関係をリバース エンジニアリングすることはできません。
1 つ以上のレイヤーを選択し、選択したレイヤーのショートカット メニューを開き、 [依存関係の生成] をクリックします。
存在すべきでない依存関係がいくつか表示される場合は、それらの依存関係を編集し、意図した設計に合わせて調整できます。
レイヤーと依存関係を編集して目的の設計を表示する
システムに追加予定の変更または目的のアーキテクチャを示すには、依存関係図を編集します。
To | 実行する手順 |
---|---|
依存関係の方向を変更または制限する | その [方向] プロパティを設定します。 |
新しい依存関係を生成する | 依存関係ツールと双方向の依存関係ツールを使用します。 複数の依存関係を描画するには、ツールをダブルクリックします。 完了したら、 [ポインター] ツールを選択するか、Esc キーを押します。 |
レイヤーに関連付けられている成果物が、指定した名前空間に依存できないように指定する | レイヤーの [禁止された名前空間の依存関係] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。 |
レイヤーに関連付けられている成果物を、指定した名前空間に所属させることができないように指定する | レイヤーの [禁止された名前空間] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。 |
レイヤーに関連付けられている成果物を、指定した名前空間のいずれかに必ず所属させるように指定する | レイヤーの [必要な名前空間] プロパティに名前空間を入力します。 名前空間はセミコロン ( ; ) を使用して区切ります。 |
図における要素の表示方法を変更する
プロパティを編集して、レイヤーのサイズ、形状、色、位置、または依存関係の色を変更できます。
コード マップ上のパターンと依存関係を見つけます。
依存関係図を作成するときに、コート マップも作成できます。 これらの図を利用することで、コードを検証するときに、パターンと依存関係を見つけやすくなります。 ソリューション エクスプローラー、クラス ビュー、またはオブジェクト ブラウザーを使用して、アセンブリ、名前空間、およびクラスを調べることができます。これらは、通常は既存のレイヤーに対応しています。 コード マップについての詳細は、次を参照してください。