從您的程式碼建立相依性圖表
若要視覺化軟體系統的高階邏輯架構,請在 Visual Studio 中建立相依性圖表。 若要確定您的程式碼與這個設計一致,請使用相依性圖表來驗證程式碼。 您可以建立 Visual C# 和 Visual Basic 專案的相依性圖表。 若要查看哪些 Visual Studio 版本支援這項功能,請參閱架構和模型化工具的版本支援。
相依性圖表可讓將 Visual Studio 解決方案項目組織為邏輯的抽象群組,稱為圖層。 您可以使用圖層來說明這些成品所執行的工作,或系統的主要元件。
每個圖層都可以包含其他圖層以描述更詳細的工作。 您也可以指定圖層之間的預定或現有相依性。 這些表示為箭號的相依性,顯示哪些圖層使用或可以使用其他圖層代表的功能。 若要維持程式碼的架構控制,請在圖表上顯示預期的相依性,然後根據圖表驗證程式碼。
建立相依性圖表
在建立相依性圖表之前,請確定您的解決方案具有模型專案。
重要
不要從模型專案將現有相依性圖表加入、拖曳、複製到其他模型專案或解決方案中的其他位置。 即使您變更圖表,此方式仍會保存原始圖表的參考。 這樣也會導致圖層驗證無法正確執行,同時可能會造成其他問題,例如項目遺失或嘗試開啟圖表時發生其他錯誤。
請改以將新相依性圖表加入至模型專案。 將來源圖表中的項目複製到新圖表。 儲存模型專案和新相依性圖表。
將新相依性圖表加入至模型專案
注意
從 Visual Studio 2019 16.2 版開始,支援 .NET Core 專案的相依性圖表。
在[結構] 功能表上選擇 [新增相依性圖表]。
在 [範本] 底下,選擇 [相依性圖表]。
命名圖表。
在 [加入至模型專案] 中,瀏覽並選取解決方案中的現有模型專案。
-或-
選擇 [建立新模型專案] 來將新的模型專案加入至解決方案。
注意
相依性圖表必須存在於模型專案之內。 但是,您可以將它連結到方案中任何位置的項目。
請務必確保儲存了模型專案和相依性圖表。
從 Code Map 拖放或複製並貼上
使用 [結構] 功能表產生解決方案的 Code Map。
如果您只想在產品程式碼中強制執行相依性,請考慮套用 Code Map 篩選來移除解決方案資料夾和「測試資產」。
在產生的 Code Map 上,移除「外部」節點,或將其展開以顯示外部組件,視您是否要強制執行命名空間相依性而定。 從 Code Map 中刪除非必要的組件。
使用 [結構] 功能表,為解決方案建立新的相依性圖表。
選取 Code Map 上的所有節點 (使用 Ctrl + A,或在按下、拖移並釋放之前,按下 Shift 鍵來使用橡皮框選取範圍)。
拖放或複製並貼上選取的元素至新的相依性驗證圖表。
這會顯示目前的應用程式結構。 決定您希望結構是什麼,並據以修改相依性圖表。
從成品建立圖層
您可以從 Visual Studio 方案項目 (例如,專案、程式碼檔、命名空間、類別和方法) 建立圖層。 這樣會自動建立這些圖層和項目之間的連結,將這些項目納入圖層驗證程序中。
您可以將圖層連結至不支援驗證的項目,例如 Word 文件或 PowerPoint 簡報。 這可讓您將圖層與規格或計劃產生關聯。 您也可以將圖層連結至多個應用程式所共用的專案檔案,但驗證程序不會包含這些以泛型名稱顯示的圖層,例如「Layer 1」和「Layer 2」。
若要了解連結的項目是否支援驗證,請開啟 [圖層總管],並檢查項目的 [支援驗證] 屬性。 請參閱管理成品的連結。
目標 | 請依照下列步驟: |
---|---|
建立單一成品的圖層 |
重要:將二進位檔案拖曳至相依性圖表並不會自動將其參考加入物件模型專案。 手動加入您要驗證模型專案的二進位檔案。 將二進位檔案加入至模型專案
|
為所有選取的成品建立單一圖層 | 同時將所有成品拖曳至相依性圖表。 圖層隨即出現在圖表上,並且連結到所有成品。 |
為每個選取的成品建立圖層 | 按住 SHIFT 鍵不放,同時將所有成品拖曳至相依性圖表。 注意:如果您使用 SHIFT 鍵來選取某個範圍的項目,請在選取成品之後放開該鍵。 將成品至拖曳圖表時,再次按住該鍵不放。 每個成品的圖層隨即出現在圖表上,並且連結到個別成品。 |
將成品加入至圖層 | 將成品拖曳至圖層。 |
建立新的未連結圖層 | 在 [工具箱] 中,展開 [相依性圖表] 區段,然後將 [圖層] 拖曳至相依性圖表。 若要加入多個圖層,請按兩下 [圖層] 工具。 當您完成後,請選擇 [指標] 工具,或按 ESC 鍵。 - 或 - 開啟相依性圖表的捷徑功能表,選擇 [新增],然後選擇 [圖層]。 |
建立巢狀圖層 | 將現有的圖層拖曳至另一個圖層上。 - 或 - 開啟圖層的捷徑功能表,選擇 [新增],然後選擇 [圖層]。 |
建立包含兩個或多個現有圖層的新圖層 | 選取圖層接著開啟您所選項目的捷徑功能表,然後選取 [群組]。 |
變更圖層的色彩 | 將圖層的 [色彩] 屬性設定為所要的色彩。 |
指定與圖層關聯的成品不應屬於指定的命名空間 | 在圖層的 [Forbidden Namespaces] \(禁止的命名空間\) 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
指定與圖層關聯的成品不可相依於指定的命名空間 | 在圖層的 [Forbidden Namespace Dependencies] \(禁止的命名空間相依性\) 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
指定與圖層關聯的成品必須屬於其中一個指定的命名空間 | 在圖層的 [Required Namespaces] \(必要命名空間\) 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
圖層上的數字表示圖層連結的成品數目。 然而,當您閱讀這個數字時,請記住:
如果圖層連結的成品有包含其他成品,但圖層未直接連結這些其他成品,則數字將只包含連結的成品。 然而,在圖層驗證期間會加入其他成品以進行分析。
例如,如果圖層連結到單一命名空間,即使命名空間包含類別,連結的成品數目仍為 1。 如果圖層也有命名空間中每個類別的連結,則數字將包含這些已連結的類別。
如果圖層包含已連結到成品的其他圖層,即使此容器圖層上的數字未包含那些成品,容器圖層也會連結到那些成品。
管理圖層與成品之間的連結
在相依性圖表開啟圖層的捷徑功能表,然後選取 [檢視連結]。
[圖層總管] 會顯示所選取圖層的成品連結。
使用下列工作來管理這些連結:
目標 | 在圖層總管中 |
---|---|
刪除圖層與成品之間的連結 | 開啟成品連結的捷徑功能表然後選擇 [刪除]。 |
將連結從某個圖層移到另一個圖層 | 將成品連結拖曳至圖表上的現有圖層。 - 或 - 1.開啟成品連結的捷徑功能表然後選擇 [剪下]。 2.在相依性圖表開啟圖層的捷徑功能表,然後選擇 [貼上]。 |
將連結從某個圖層複製到另一個圖層 | 1.開啟成品連結的捷徑功能表然後選擇 [複製]。 2.在相依性圖表開啟圖層的捷徑功能表,然後選擇 [貼上]。 |
從現有的成品連結建立新的圖層 | 將成品連結拖曳至圖表上的空白區域。 |
確認連結的成品支援針對相依性圖表進行驗證。 | 查看成品連結的 [支援驗證] 資料行。 |
對現有的相依性進行反向工程
只要與某個圖層關聯的成品參考到與另一個圖層關聯的成品,相依性便會存在。 例如,某個圖層中的類別會宣告在另一個圖層中具有類別的變數。 對於連結到圖表上之圖層的成品,您可以就其現有相依性進行反向工程。
注意
您無法針對特定種類的成品進行其相依性的反向工程。 例如,對連結到文字檔的圖層進行反向工程時,無法找出與該圖層之間的任何相依性。 若要查看哪些成品可以進行反向工程的相依性,為其中一個或多個圖層開啟捷徑功能表,然後選取 [檢視連結]。 在 [圖層總管] 中,檢查 [支援驗證] 資料行。 如果成品的這個資料行顯示 False,則無法進行該成品的相依性反向工程。
選取一個或多個圖層,開啟選取的圖層的捷徑功能表然後選取 [產生相依性]。
如果您看到一些不應該存在的相依性,您可以編輯這些相依性,使其符合預定的設計。
編輯圖層與相依性以顯示預定設計
您可以編輯相依性圖表,藉以說明您計劃對系統或預期的架構進行的變更:
目標 | 執行這些步驟 |
---|---|
變更或限制相依性的方向 | 設定其 [Direction] \(方向\) 屬性。 |
建立新的相依性 | 使用相依性和雙向相依性工具。 若要繪製多個相依性,請按兩下工具。 當您完成後,請選擇 [指標] 工具,或按 ESC 鍵。 |
指定與圖層關聯的成品不可相依於指定的命名空間 | 在圖層的 [Forbidden Namespace Dependencies] \(禁止的命名空間相依性\) 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
指定與圖層關聯的成品不可屬於指定的命名空間 | 在圖層的 [Forbidden Namespaces] \(禁止的命名空間\) 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
指定與圖層關聯的成品必須屬於其中一個指定的命名空間 | 在圖層的 [Required Namespaces] \(必要命名空間\) 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
變更項目在圖表上的顯示方式
您可以藉由編輯屬性的方式,變更圖層的大小、圖形、色彩和位置,或相依性的色彩。
探索 Code Map 的模式和相依性
建立相依性圖表時,您也可以建立 Code Map。 這些圖表可協助您在瀏覽程式碼時探索模式和相依性。 使用 [方案總管]、[類別檢視] 或 [物件瀏覽器] 瀏覽組件、命名空間和類別 (這通常會正確對應至現有的圖層)。 如需 Code Map 的詳細資訊,請參閱: