コードから依存関係図を作成する

ソフトウェア システムの高度な論理アーキテクチャを視覚化するには、Visual Studioに dependency ダイアグラムを作成します。 コードがこの設計と一致していることを確認するには、依存関係図を使用してコードを検証します。 Visual C# およびVisual Basic プロジェクトの依存関係図を作成できます。 この機能をサポートする Visual Studio のエディションを確認するには、 アーキテクチャおよびモデリング ツールのエディションのサポートを参照してください。

依存関係図を作成する

依存関係図を使用すると、Visual Studioソリューション項目を、layers と呼ばれる論理的な抽象グループに整理できます。 レイヤーを使用して、これらの成果物が実行する主要なタスクまたはシステムの主要なコンポーネントを記述できます。

各レイヤーには、より詳細なタスクを記述する他のレイヤーが含まれている場合があります。 また、レイヤー間の目的または既存の 依存関係 を指定することもできます。 これらの依存関係は、矢印として表され、他のレイヤーで表される機能を使用または使用できるレイヤーを示します。 コードのアーキテクチャ制御を維持するには、図に対する目的の依存関係を表示し、図に対してコードを検証します。

ビデオ: アーキテクチャの依存関係をリアルタイムで検証する

依存関係図を作成する

依存関係図を作成する前に、ソリューションにモデリング プロジェクトがあることを確認します。

Important

既存の依存関係図を、あるモデリング プロジェクトから別のモデリング プロジェクト、またはソリューション内の別の場所に追加、ドラッグ、コピーしないでください。 これにより、ダイアグラムを変更した場合でも、元のダイアグラムからの参照が保持されます。 これにより、レイヤーの検証が正しく機能しなくなり、図を開こうとすると要素の不足やその他のエラーなどの他の問題が発生する可能性があります。

代わりに、モデリング プロジェクトに新しい依存関係図を追加します。 ソース ダイアグラムから新しいダイアグラムに要素をコピーします。 モデリング プロジェクトと新しい依存関係図の両方を保存します。

モデリング プロジェクトに新しい依存関係図を追加する

Note

.NET Core プロジェクトの依存関係図は、2019 バージョン 16.2 以降Visual Studioサポートされています。

  1. ソリューション エクスプローラーでモデリング プロジェクトを右クリックし、Add>New Item を選択します。

  2. [ 新しい項目の追加] ウィンドウで、[ 依存関係検証ダイアグラム] を選択し、ウィンドウの下部にあるダイアグラムの名前を入力して、[ 追加] を選択します。

コード マップからドラッグ アンド ドロップするか、コピーして貼り付ける

  1. [アーキテクチャ] メニューを使用して、ソリューションのコード マップを生成します。

  2. 製品コードの依存関係のみを適用する場合は、コード マップ フィルターを適用してソリューション フォルダーと "テスト 資産" を削除することを検討してください。

  3. 生成されたコード マップで、名前空間の依存関係を適用するかどうかに応じて、"外部" ノードを削除するか、展開して外部アセンブリを表示します。 コード マップから不要なアセンブリを削除します。

  4. 依存関係 検証ダイアグラム 項目をソリューションの依存関係検証プロジェクトに追加します。

  5. コード マップ上のすべてのノードを選択します (Ctrl + キーを使用するか、Shift キーを押してラバー バンドを選択してからクリック、ドラッグ、離します)。

  6. 選択した要素を新しい依存関係検証ダイアグラムにドラッグ アンド ドロップするか、コピーして貼り付けます。

  7. これは、現在のアプリ アーキテクチャを示しています。 アーキテクチャを決定し、それに応じて依存関係図を変更します。

コード マップから生成された依存関係図を示すスクリーンショット。

アーティファクトからレイヤーを作成する

プロジェクト、コード ファイル、名前空間、クラス、メソッドなど、Visual Studio ソリューション項目からレイヤーを作成できます。 これにより、レイヤーとアイテムの間のリンクが自動的に作成されます(レイヤーの検証プロセスに含まれます)。

WordドキュメントやPowerPointプレゼンテーションなど、検証をサポートしていないアイテムにレイヤーをリンクできます。 これにより、レイヤーを仕様またはプランに関連付けることができます。 複数のアプリ間で共有されているプロジェクト内のファイルにレイヤーをリンクすることもできますが、検証プロセスには、"レイヤー 1" や "レイヤー 2" などの一般的な名前で表示されるレイヤーは含まれません。

リンクされたアイテムが検証をサポートしているかどうかを確認するには、 レイヤー エクスプローラー を開き、アイテムの [検証のサポート ] プロパティを調べます。 成果物へのリンクの管理を参照してください。

から 次の手順に従います
1 つの成果物のレイヤーを作成する
  1. 次のソースから依存関係図に項目をドラッグします。
    レイヤーがダイアグラムに表示され、成果物にリンクされます。
  2. 関連付けられているコードまたは成果物の役割を反映するようにレイヤーの名前を変更します。

大事な: バイナリ ファイルを依存関係図にドラッグしても、モデリング プロジェクトへの参照は自動的に追加されません。 検証するバイナリ ファイルをモデリング プロジェクトに手動で追加します。 モデリング プロジェクトにバイナリ ファイルを追加するには
  1. ソリューション エクスプローラー で、モデリング プロジェクトのショートカット メニューを開き、 既存の項目の追加を選択します。
  2. [ 既存の項目の追加 ] ダイアログ ボックスで、バイナリ ファイルを参照して選択し、[ OK] を選択します。 バイナリ ファイルはモデリング プロジェクトに表示されます。
  3. ソリューション エクスプローラーで、追加したバイナリ ファイルを選択し、F4 キーを押して Properties ウィンドウを開きます。
  4. 各バイナリ ファイルで、[ ビルド アクション] プロパティを [検証] に設定します。
選択したすべての成果物に対して 1 つのレイヤーを作成する すべての成果物を依存関係図に同時にドラッグします。

レイヤーがダイアグラムに表示され、すべての成果物にリンクされます。
選択した成果物ごとにレイヤーを作成する Shift キーを押しながら、すべての成果物を依存関係図に同時にドラッグします。
メモ:Shift キーを使用して項目の範囲を選択する場合は、成果物を選択した後にキーを離します。 もう一度ボタンを長押しして、アーティファクトを図にドラッグします。

各成果物のレイヤーが図に表示され、各成果物にリンクされます。
成果物をレイヤーに追加する 成果物をレイヤーにドラッグします。
リンクされていない新しいレイヤーを作成する ツールボックスで、[依存関係図] セクションを展開し、レイヤーを依存関係図にドラッグします。

複数のレイヤーを追加するには、ツールをダブルクリックします。 完了したら、 ポインター ツールを選択するか、 Esc キーを押します。

-又は-

依存関係図のショートカット メニューを開き、[ 追加] を選択して、[ レイヤー] を選択します。
入れ子になったレイヤーを作成する 既存のレイヤーを別のレイヤーにドラッグします。

-又は-

レイヤーのショートカット メニューを開き、[ 追加] を選択して、[ レイヤー] を選択します。
2 つ以上の既存のレイヤーを含む新しいレイヤーを作成する レイヤーを選択し、選択したショートカット メニューを開き、[ グループ] を選択します。
レイヤーの色を変更する Color プロパティを目的の色に設定します。
レイヤーに関連付けられている成果物が指定された名前空間に属しないように指定する レイヤーの Forbidden Namespaces プロパティに名前空間を 入力します。 名前空間を区切るには、セミコロン (;) を使用します。
レイヤーに関連付けられている成果物が、指定した名前空間に依存できないことを指定する レイヤーの [禁止された名前空間の依存関係 ] プロパティに名前空間を入力します。 名前空間を区切るには、セミコロン (;) を使用します。
レイヤーに関連付けられている成果物が、指定した名前空間のいずれかに属している必要があることを指定する レイヤーの [必須名前空間] プロパティに 名前空間を 入力します。 名前空間を区切るには、セミコロン (;) を使用します。

レイヤー上の数は、レイヤーにリンクされている成果物の数を示します。 ただし、この番号を読むときは、次の点に注意してください。

  • レイヤーが他の成果物を含む成果物にリンクしているが、レイヤーが他の成果物に直接リンクしていない場合、その数にはリンクされた成果物のみが含まれます。 ただし、他の成果物は、レイヤーの検証中に分析のために含まれます。

    たとえば、レイヤーが 1 つの名前空間にリンクされている場合、名前空間にクラスが含まれている場合でも、リンクされた成果物の数は 1 になります。 レイヤーに名前空間内の各クラスへのリンクも含まれている場合、その数にはリンクされたクラスが含まれます。

  • 成果物にリンクされている他のレイヤーがレイヤーに含まれている場合、コンテナー レイヤーの数にそれらの成果物が含まれていない場合でも、コンテナー レイヤーもそれらの成果物にリンクされます。

レイヤーと成果物の間のリンクを管理する

  1. 依存関係図で、レイヤーのショートカット メニューを開き、[ リンクの表示] を選択します。

    レイヤー エクスプローラーには 、選択したレイヤーの成果物リンクが表示されます。

  2. これらのリンクを管理するには、次のタスクを使用します。

から レイヤー エクスプローラーで
レイヤーと成果物の間のリンクを削除する 成果物リンクのショートカット メニューを開き、[削除] を選択 します
リンクをレイヤー間で移動する 成果物リンクをダイアグラム上の既存のレイヤーにドラッグします。

-又は-

1. 成果物リンクのショートカット メニューを開き、[ 切り取り] を選択します。
2. 依存関係図で、レイヤーのショートカット メニューを開 き、[貼り付け] を選択します。
1 つのレイヤーから別のレイヤーにリンクをコピーする 1. 成果物リンクのショートカット メニューを開き、[ コピー] を選択します。
2. 依存関係図で、レイヤーのショートカット メニューを開 き、[貼り付け] を選択します。
既存の成果物リンクから新しいレイヤーを作成する 成果物リンクを図の空白領域にドラッグします。
リンクされた成果物が依存関係図に対する検証をサポートしていることを確認します。 成果物リンク用のSupports Validation列を確認します。

既存の依存関係をリバース エンジニアリングする

依存関係は、あるレイヤーに関連付けられている成果物が、別のレイヤーに関連付けられている成果物への参照を持つ場所に存在します。 たとえば、あるレイヤーのクラスは、別のレイヤーにクラスを持つ変数を宣言します。 ダイアグラム上のレイヤーにリンクされている成果物の既存の依存関係をリバース エンジニアリングできます。

Note

依存関係は、特定の種類の成果物に対してリバース エンジニアリングすることはできません。 たとえば、テキスト ファイルにリンクされているレイヤーとの間でリバース エンジニアリングされる依存関係はありません。 リバース エンジニアリングできる依存関係を持つ成果物を確認するには、1 つまたは複数のレイヤーのショートカット メニューを開き、[ リンクの表示] を選択します。 レイヤー エクスプローラーでサポート検証の列を調べます。 依存関係は、この列に False が表示される成果物に対してリバース エンジニアリングされません。

  • 1 つまたは複数のレイヤーを選択し、選択したレイヤーのショートカット メニューを開き、[ 依存関係の生成] を選択します。

    存在すべきではない依存関係が表示される場合は、これらの依存関係を編集して、目的の設計に合わせて調整できます。

レイヤーと依存関係を編集して目的のデザインを表示する

システムまたは目的のアーキテクチャに加える予定の変更を説明するには、依存関係図を編集します。

から 次の手順を実行します。
依存関係の方向を変更または制限する Direction プロパティを設定します。
新しい依存関係を作成する 依存関係と双方向の依存関係ツールを使用します。

複数の依存関係を描画するには、ツールをダブルクリックします。 完了したら、 ポインター ツールを選択するか、 Esc キーを押します。
レイヤーに関連付けられている成果物が、指定した名前空間に依存できないことを指定する レイヤーの [禁止された名前空間の依存関係 ] プロパティに名前空間を入力します。 名前空間を区切るには、セミコロン (;) を使用します。
レイヤーに関連付けられている成果物が指定された名前空間に属してはならないことを指定する レイヤーの Forbidden Namespaces プロパティに名前空間を 入力します。 名前空間を区切るには、セミコロン (;) を使用します。
レイヤーに関連付けられている成果物が、指定した名前空間のいずれかに属している必要があることを指定する レイヤーの [必須名前空間] プロパティに 名前空間を 入力します。 名前空間を区切るには、セミコロン (;) を使用します。

図に要素を表示する方法を変更する

プロパティを編集して、レイヤーのサイズ、形状、色、位置、または依存関係の色を変更できます。

コード マップ上のパターンと依存関係を検出する

依存関係図の作成時に、 コード マップを作成することもできます。 これらの図は、コードの探索中にパターンと依存関係を検出するのに役立ちます。 ソリューション エクスプローラー、クラス ビュー、またはオブジェクト ブラウザーを使用して、アセンブリ、名前空間、およびクラスを探索します。これは、多くの場合、既存のレイヤーに適切に対応します。 コード マップの詳細については、次を参照してください。