方法: 成果物からレイヤー図を生成する
Visual Studio Ultimate では、レイヤー図を使用して、システムの全体的なアーキテクチャを視覚化し、コードが設計上矛盾しないようにしています。このために、Visual Studio ソリューションから論理、抽象グループ、またはレイヤーに対して成果物を編成し、関連付けます。これらのレイヤーは、成果物が行う主要なタスク、またはシステムの主要なコンポーネントを記述します。
レイヤー間の矢印は、どのレイヤーが他のレイヤーの機能を使用できるかを示す依存関係を表しています。 コードに対してアーキテクチャ制約を適用するには、図で目的の依存関係を示し、図と照らし合わせてコードを検証します。 このようにしてレイヤー図を使用することで、コードを簡単に理解、更新、再使用、および保守できます。
レイヤー図の詳細については、次のトピックを参照してください。
このトピックの内容
レイヤー図を生成する
成果物からレイヤーを生成する
レイヤーと成果物の間のリンクを管理する
既存の依存関係をリバース エンジニアリングする
図を更新して目的の設計を表示する
図の要素の外観を変更する
レイヤー図を生成する
レイヤー図はモデリング プロジェクト内に生成する必要があります。 新しいレイヤー図を既存のモデリング プロジェクトに追加することも、新しいレイヤー図用の新しいモデリングをソリューションに作成することもできます。
新しいレイヤー図をモデリング プロジェクトに追加するには
[アーキテクチャ] メニューの [新しいダイアグラム] をクリックします。
[テンプレート] で、[レイヤー図] をクリックします。
図に名前を付けます。
[モデリング プロジェクトへの追加] で、ソリューション内の既存のモデリング プロジェクトを参照して選択します。
または
[新しいモデリング プロジェクトを作成します] をクリックして、新しいモデリング プロジェクトをソリューションに追加します。
注意
レイヤー図はモデリング プロジェクト内に存在している必要があります。 ただし、それはソリューション内の任意の場所に存在する成果物にリンクできます。
同じモデリング プロジェクト内に既存のレイヤー図をコピーすることもできます。
注意
モデリング プロジェクトから別のモデリング プロジェクトまたはソリューション内の別の場所に、既存のレイヤー図を追加、ドラッグ、またはコピーしないでください。 この方法でコピーされたレイヤー図には、その図を変更しても、コピー元の図と同じ参照が含まれます。 これにより、レイヤー検証は正しく機能せず、要素が欠落したり、図を開こうとすると他のエラーが発生するなど、他の問題が生じる可能性があります。
レイヤー図をコピーするには、次の手順を実行します。
既存のレイヤー図をコピーするには
新しいレイヤー図をモデリング プロジェクトに追加します。
コピー元のレイヤー図から新しいレイヤー図へ要素をコピーします。
成果物からレイヤーを生成する
プロジェクト、コード ファイル、名前空間、クラス、メソッドなど、Visual Studio ソリューションの成果物からレイヤーを生成できます。 これにより、各レイヤーと成果物の間にリンク (レイヤー検証プロセスに含まれる) が自動的に作成されます。 また、各レイヤーを、レイヤー検証をサポートしない特定の種類の成果物にリンクすることもできます。 たとえば、Word 文書や PowerPoint プレゼンテーションなどのファイルにレイヤーをリンクできます。 これは、仕様や計画をレイヤーに関連付ける場合に便利です。リンクされている成果物が検証をサポートしているかどうかを確認するには、レイヤー エクスプローラーを開き、成果物リンクの "検証をサポート" プロパティを調べます。 詳細については、「レイヤーと成果物の間のリンクを管理する」を参照してください。
各レイヤーは図では四角形で表示され、より詳細なタスクを示す入れ子になったレイヤーを含めることができます。 レイヤー パターンの詳細については、patterns & practices の Web サイトを参照してください。
レイヤーの数字は、レイヤーにリンクされている成果物の数を示します。 ただし、この数値を読み取るときには、次の点に注意してください。
1 つのレイヤーが他の成果物を含む 1 つの成果物にリンクされているが、他の成果物に直接リンクされていない場合、その数字にはリンクされた成果物のみが含まれます。 ただし、レイヤー検証時の分析にはそれらの他の成果物も含まれます。
たとえば、1 つのレイヤーが 1 つの名前空間にリンクされている場合、その名前空間に複数のクラスが含まれていても、リンクされた成果物の数は 1 です。 レイヤーに名前空間の各クラスへのリンクもある場合、その数字にはリンクされたクラスが含まれます。
1 つのレイヤーに成果物にリンクされた他のレイヤーが含まれている場合は、そのコンテナー レイヤーの数字にそれらの成果物が含まれていなくても、コンテナー レイヤーはそれらの成果物にリンクされます。
レイヤー図を生成する場合は、コードの調査および理解を支援する依存関係グラフを生成することをお勧めします。 これらのグラフは、コード内のクラスター、パターン、自然レイヤー、および依存関係を探すときに役立ちます。 このため、成果物をレイヤーに簡単に割り当てることができます。 アーキテクチャ エクスプローラーでも名前空間やクラスを調べることができます。これらは、通常は既存のレイヤーに対応しています。 その後で、レイヤー図を使用してコードを更新できます。
詳細については、次のトピックを参照してください。
レイヤーを生成するには、次の操作を行います。
目的 |
手順 |
---|---|
1 つの成果物を表すレイヤーを生成する |
|
選択したすべての成果物を表す 1 つのレイヤーを生成する |
すべての成果物を同時にレイヤー図へドラッグします。 レイヤーが図に表示され、すべての成果物にリンクされます。 |
選択した各成果物を表すレイヤーを生成する |
Shift キーを押しながら、すべての成果物を同時にレイヤー図へドラッグします。
メモ
Shift キーを使用して項目の範囲を選択する場合は、成果物を選択した後でキーを離します。成果物を図にドラッグするときは、キーを再び押して、押したままにします。
各成果物を表すレイヤーが図に表示され、各成果物にリンクされます。 |
成果物をレイヤーに追加する |
成果物をレイヤーにドラッグします。 |
リンクされない新しいレイヤーを生成する |
ツールボックスで、[レイヤー図] セクションを展開し、[レイヤー] をレイヤー図にドラッグします。 複数のレイヤーを追加するには、ツールをダブルクリックします。 操作が終わったら、[ポインター] ツールをクリックするか、Esc キーを押します。 または レイヤー図を右クリックし、[追加] をポイントし、[レイヤー] をクリックします。 |
入れ子になったレイヤーを生成する |
既存のレイヤーを別のレイヤー上へドラッグします。 または レイヤーを右クリックし、[追加] をポイントし、[レイヤー] をクリックします。 |
複数の既存レイヤーを含む新しいレイヤーを生成する |
レイヤーを選択し、選択したレイヤーを右クリックし、[グループ] をクリックします。 |
レイヤーの色を変更する |
レイヤーの "カラー" プロパティを任意の色に設定します。 |
レイヤーに関連付けられている成果物を、指定した名前空間に所属させることができないように指定する |
レイヤーの "禁止された名前空間" プロパティに名前空間を入力します。 名前空間はセミコロン (;) を使用して区切ります。 |
レイヤーに関連付けられている成果物が、指定した名前空間に依存できないように指定する |
レイヤーの "禁止された名前空間の依存関係" プロパティに名前空間を入力します。 名前空間はセミコロン (;) を使用して区切ります。 |
レイヤーに関連付けられている成果物を、指定した名前空間のいずれかに必ず所属させるように指定する |
レイヤーの "必要な名前空間" プロパティに名前空間を入力します。 名前空間はセミコロン (;) を使用して区切ります。 |
レイヤーと成果物の間のリンクを管理する
レイヤー図でレイヤーを右クリックし、[リンクの表示] をクリックします。
レイヤー エクスプローラーに、選択したレイヤーに関する成果物のリンクが表示されます。
これらのリンクを管理するには、次の操作を行います。
目的 |
レイヤー エクスプローラーでの操作 |
---|---|
レイヤーと成果物のリンクを削除する |
成果物のリンクを右クリックし、[削除] をクリックします。 |
リンクを別のレイヤーに移動する |
成果物のリンクを図上の既存のレイヤーにドラッグします。 または
|
リンクを別のレイヤーにコピーする |
|
既存の成果物のリンクから新しいレイヤーを生成する |
成果物のリンクを図上の空白領域にドラッグします。 |
リンクされた成果物がレイヤー図に対する検証をサポートしていることを確認する |
成果物のリンクの [検証をサポート] 列を確認します。 |
既存の依存関係をリバース エンジニアリングする
依存関係が存在するのは、あるレイヤーに関連付けられている成果物が、別のレイヤーに関連付けられている成果物を参照している場合です。 たとえば、あるレイヤー内のクラスが、別のレイヤー内のクラスを保持する変数を宣言する場合などです。 図のレイヤーにリンクされている成果物の既存の依存関係はリバース エンジニアリングできます。
注意
成果物の種類によっては、依存関係をリバース エンジニアリングできないものもあります。 たとえば、テキスト ファイルにリンクされているレイヤーから、またはそのレイヤーに対して依存関係をリバース エンジニアリングすることはできません。 リバース エンジニアリングできる依存関係のある成果物を確認するには、1 つ以上のレイヤーを右クリックし、[リンクの表示] をクリックします。 レイヤー エクスプローラーで、[検証をサポート] 列を確認します。 この列の値が [FALSE] の成果物については、依存関係をリバース エンジニアリングできません。
レイヤー間の既存の依存関係をリバース エンジニアリングするには
- 1 つ以上のレイヤーを選択し、選択したレイヤーを右クリックし、[依存関係の生成] をクリックします。
通常は、不要な依存関係がいくつか見つかります。 これらの依存関係を編集して、目的の設計に準拠するよう配置できます。
図を更新して目的の設計を表示する
実行する予定の変更を表示するには、または目的のアーキテクチャを表示するには、レイヤー図を更新します。
目的 |
実行する手順 |
---|---|
不要な依存関係を削除する |
依存関係をクリックし、Del キーを押します。 |
依存関係の方向を変更または制限する |
依存関係の Direction プロパティを設定します。 |
新しい依存関係を生成する |
依存関係ツールと双方向の依存関係ツールを使用します。 複数の依存関係を描画するには、ツールをダブルクリックします。 操作が終わったら、[ポインター] ツールをクリックするか、Esc キーを押します。 |
レイヤーに関連付けられている成果物が、指定した名前空間に依存できないように指定する |
レイヤーの "禁止された名前空間の依存関係" プロパティに名前空間を入力します。 名前空間はセミコロン (;) を使用して区切ります。 |
レイヤーに関連付けられている成果物を、指定した名前空間に所属させることができないように指定する |
レイヤーの "禁止された名前空間" プロパティに名前空間を入力します。 名前空間はセミコロン (;) を使用して区切ります。 |
レイヤーに関連付けられている成果物を、指定した名前空間のいずれかに必ず所属させるように指定する |
レイヤーの "必要な名前空間" プロパティに名前空間を入力します。 名前空間はセミコロン (;) を使用して区切ります。 |
図の要素の外観を変更する
レイヤーおよび依存関係を識別しやすくするには、またはチーム メンバーとそれらについて話し合うことができるようにするには、次の方法で図の外観およびレイアウトを編集します。
レイヤーのサイズ、形状、および位置を変更する。
レイヤーと依存関係の色を変更する。
レイヤーまたは依存関係を選択します。
選択したレイヤーまたは依存関係を右クリックし、[プロパティ] をクリックします。
[プロパティ] ウィンドウで、"カラー" プロパティを変更します。