共用方式為


相依性圖表:指導方針

在 Visual Studio 中建立 相依性圖表 ,在高層級描述應用程式的架構。 使用相依性圖驗證程式碼,確保您的程式碼與此設計保持一致。 您也可以在建置過程中包含圖層驗證。

若要查看哪些版本的 Visual Studio 支援此功能,請參閱 架構和模型化工具的版本支援

備註

從 Visual Studio 2019 16.2 版開始,支援 .NET Core 專案的相依性圖表。

什麼是依賴關係圖?

與傳統的架構圖一樣,依賴關係圖識別了設計的主要組件或功能單元及其相互依賴關係。 圖表上的每個節點 (稱為 ) 代表命名空間、專案或其他構件的邏輯群組。 您可以繪製設計中應該存在的相依性。 與傳統架構圖不同,您可以驗證原始程式碼中的實際相依性是否符合您指定的預期相依性。 藉由將驗證作為 Team Foundation Server 上常規建置的一部分,您可以確保程式代碼在未來的變更中繼續遵守系統的架構。 請參閱 相依關係圖:參考

如何使用相依性圖表來設計或更新您的應用程式

下列步驟概述如何在開發程式中使用相依性圖表。 本主題稍後的章節將說明每個步驟的詳細資訊。 如果您要開發新設計,請省略參照現有程式碼的步驟。

備註

這些步驟會按大致順序顯示。 您可能會希望將任務重疊進行,並根據自己的情況重新排序,在您專案的每次迭代開始時,再次審視這些任務。

  1. 為整個應用程式或其中的層建立相依性圖

  2. 定義圖層以代表應用程式的主要功能區域或元件 。 根據這些圖層的功能命名這些圖層,例如「簡報」或「服務」。 如果您有 Visual Studio 解決方案,您可以將每個層與 成品集合產生關聯,例如專案、命名空間、檔案等等。

  3. 探索層之間的現有相依性

  4. 編輯圖層和相依性 ,以顯示您希望程式碼反映的更新設計。

  5. 透過建立圖層來代表主要架構區塊或元件,並定義相依關係以顯示每個圖層如何使用其他圖層,來設計應用程式的新區域

  6. 編輯圖表的佈局和外觀 ,以幫助您與同事討論。

  7. 根據相依性圖表驗證程式碼 ,以醒目提示程式碼與您需要的架構之間的衝突。

  8. 更新程式碼以符合您的新架構。 反覆開發和重構程式碼,直到驗證顯示沒有衝突為止。

  9. 建置過程中包含層驗證,以確保程式碼繼續遵循您的設計。

建立相依性圖表

相依關係圖必須在建模專案內建立。 您可以將新的相依關係圖新增至現有的建模專案、為相依關係圖建立新的建模專案,或在相同的建模專案內複製現有的相依關係圖。

這很重要

請勿將現有的相依性圖表從模型化專案新增、拖曳或複製到另一個模型化專案或解決方案中的另一個位置。 以這種方式複製的相依關係圖將具有與原始圖表相同的參照,即使您修改圖表也一樣。 這將阻止圖層驗證正常工作,並可能導致其他問題,例如在嘗試開啟圖表時遺失元素或其他錯誤。

請參閱 從程式碼建立相依性圖表

定義圖層以表示功能區域或元件

層代表 構件的邏輯群組,例如專案、程式碼檔、命名空間、類別和方法。 您可以從 Visual C# 和 Visual Basic 專案中的成品建立圖層,也可以連結文件 (例如 Word 檔案或 PowerPoint 簡報) 將規格或計劃附加至圖層。 每一層在圖表上顯示為矩形,並顯示連結至它的構件數目。 圖層可以包含描述更具體任務的巢狀圖層。

作為一般準則,請根據圖層的功能命名圖層,例如「簡報」或「服務」。 如果構件緊密相依,請將它們放在相同的圖層中。 如果構件可以個別更新或在個別應用程式中使用,請將它們放在不同的層中。

小提示

您可以連結至層的某些構件類型,但不支援針對相依關係圖進行驗證。 若要查看構件是否支援驗證,請開啟 [圖層總管 ] 以檢查構件連結的 [支援驗證 ] 屬性。 請參閱 探索層之間的現有相依性

更新不熟悉的應用程式時,您也可以建立程式碼對應。 這些圖表可協助您在探索程式碼時探索模式和相依性。 使用 [方案總管] 來探索命名空間和類別,這些命名空間和類別通常對應至現有的層。 將這些程式碼成品從 [方案總管] 拖曳至相依性圖表,將這些程式碼成品指派給圖層。 然後,您可以使用相依性圖表來協助您更新程式碼,並使其與您的設計保持一致。

See:

探索層之間的現有相依性

只要與一個層相關聯的構件具有與另一個層相關聯的構件的參照,就會存在相依性。 例如,一層中的類別宣告一個變數,該變數在另一層中具有類別。 您可以透過逆向工程來探索現有的相依性。

備註

無法針對某些類型的構件進行相依性逆向工程。 例如,不會從或至連結至文字檔的圖層進行任何相依性的逆向工程。 若要查看哪些構件具有您可以反向工程的相依關係,請用滑鼠右鍵按一下一或多個層,然後按一下 檢視鏈結。「圖層瀏覽器」中,檢查 「支援驗證」 欄。 相依關係不會針對此直欄顯示 False 的構件進行反向工程。

若要對層之間的現有相依性進行逆向工程

選取一或多個圖層,在選取的圖層上按一下滑鼠右鍵,然後按一下「產生相依性」。

通常,您會看到一些不應該存在的依賴項。 您可以編輯這些相依性,使其與預期的設計保持一致。

編輯圖層和相依性以顯示預期的設計

若要說明您計劃對系統或預期架構所做的變更,請使用下列步驟來編輯相依關係圖。 您也可以考慮在擴充程式碼之前進行一些重構變更,以改善程式碼的結構。 請參閱 改善程式碼的結構

執行下列步驟
刪除不應該存在的相依性 按一下相依性,然後按 DELETE。
變更或限制相依性的方向 設定其 Direction 屬性。
建立新的依賴關係 使用 相依性雙向相依性 工具。

若要繪製多個相依性,請按兩下工具。 完成後,按一下 指標 工具或按 ESC 鍵。
指定與圖層相關聯的構件不能相依於指定的名稱空間 在圖層的 Forbidden Namespace Dependencies 屬性中鍵入命名空間。 使用分號 (;) 來分隔命名空間。
指定與層相關聯的構件不得屬於指定的名稱空間 在圖層的 Forbidden Namespaces 屬性中鍵入命名空間。 使用分號 (;) 來分隔命名空間。
指定與圖層相關聯的構件必須屬於其中一個指定的命名空間 在圖層的 必要命名空間 屬性中輸入命名空間。 使用分號 (;) 來分隔命名空間。

改進程式碼的結構

重構變更是不會影響應用程式行為的改進,但有助於使程式碼在未來更容易更改和擴展。 結構良好的程式碼具有易於抽象化為相依性圖的設計。

例如,如果您為程式碼中的每個命名空間建立層,然後對相依性進行逆向工程,則層之間應該有一組最小的單向相依性。 如果您使用類別或方法作為圖層來建立更詳細的圖表,則結果也應該具有相同的特徵。

如果不是這種情況,程式碼將更難在其整個生命週期中更改,並且不太適合使用依賴關係圖進行驗證。

設計應用程式的新領域

當您開始開發新專案或新專案中的新區域時,您可以在開始開發程式碼之前繪製圖層和相依性,以協助識別主要元件。

  • 如果可能,請在相依性圖表中顯示可識別的架構模式。 例如,描述傳統型應用程式的相依性圖表可能包含簡報、網域邏輯和資料存放區等層。 涵蓋應用程式內單一功能的相依性圖表可能具有模型、檢視和控制器等層。

  • 為每個層(例如命名空間、類別或元件)建立程式碼成品。 這可讓您更輕鬆地遵循程式碼,並將程式碼成品連結至圖層。 建立每個構件後,請立即將其連結至適當的圖層。

  • 您不必將大部分類別和其他構件鏈結至層 ,因為它們屬於較大的構件,例如您已鏈結至層的命名空間。

  • 新特徵建立新圖表。 通常,會有一個或多個相依性圖表來描述整個應用程式。 如果您要在應用程式內設計新功能,請勿新增或變更現有圖表。 相反地,請建立您自己的圖表來反映程式碼的新部分。 新圖表中的層可能包括新功能的呈現、領域邏輯和資料庫層。

    當您建置應用程式時,您的程式碼將根據整體圖表和更詳細的功能圖表進行驗證。

編輯簡報和討論的版面配置

若要協助您識別圖層和相依性,或與小組成員討論,請透過下列方式編輯圖表的外觀和版面配置:

  • 變更圖層的大小、形狀和位置。

  • 變更圖層和相依性的顏色。

    • 選取一或多個圖層或相依性,按一下滑鼠右鍵,然後按一下「性質」。[屬性] 視窗中,編輯 [顏色] 屬性。

根據圖表驗證程式碼

編輯圖表後,您可以隨時手動驗證程式碼,或在每次建置時自動驗證它。

See:

更新程式碼以符合新架構

一般而言,當您第一次根據更新的相依性圖表驗證程式碼時,會出現錯誤。 這些錯誤可能有數個原因:

  • 構件被指派到錯誤的圖層。 在此情況下,請移動構件。

  • 構件 (例如類別) 會以與您的架構衝突的方式使用另一個類別。 在此情況下,請重構程式碼以移除相依性。

若要解決這些錯誤,請更新程式碼,直到驗證期間不再出現錯誤為止。 這通常是一個迭代過程。 如需這些錯誤的詳細資訊,請參閱 使用相依性圖表驗證程式碼

備註

當您開發或重構程式碼時,您可能會有新的成品連結至相依關係圖。 不過,例如,當您有代表現有命名空間的層,而新程式碼只會將更多材料新增至這些命名空間時,這可能不是必需的。

在開發過程中,您可能想要在驗證期間抑制部分報告中的衝突。 例如,您可能想要隱藏已解決或與您的特定案例無關的錯誤。 當您抑制錯誤時,建議在 Team Foundation 中記錄工作專案。 若要執行此工作,請參閱 使用相依性圖表驗證程式碼

在建置程序中包含圖層驗證

若要確保程式碼中的未來變更符合相依性圖表,請將層驗證納入解決方案的標準建置程式。 每當其他小組成員建置解決方案時,程式碼中相依性與相依性圖表之間的任何差異都會報告為建置錯誤。 如需在建置程序中包含層驗證的詳細資訊,請參閱 使用相依性圖表驗證程式碼