圖層圖表:方針
在 Visual Studio Ultimate 中,您可以描述應用程式的高階結構,並使用「圖層圖表」(Layer Diagram) 驗證程式碼是否符合此高階設計。 若要確保程式碼與設計一致,您可以將圖層驗證納入建置流程。
與傳統的架構圖表一樣,圖層圖表會識別設計的主要元件或功能單元及其相依性。 圖表上的每個節點 (稱為「圖層」(Layer)) 代表命名空間、專案或其他成品的邏輯群組。 您可以繪製應該存在設計中的相依性。 與傳統的架構圖表不同之處在於,您可以驗證原始程式碼的實際相依性是否符合您已指定的預定相依性。 您可以在 Team Foundation Server 上進行一般組建的驗證部分,以便確保程式碼在未來變更後仍繼續遵守系統的架構。
如需圖層圖表上各項目及其屬性的詳細資訊,請參閱圖層圖表:參考。
如何使用圖層圖表來設計或更新您的應用程式
下列步驟將概述如何在開發程序中使用圖層圖表。 本主題的後續小節會詳細說明各個步驟。 如果您正在開發新的設計,請省略參考現有程式碼的步驟。
注意事項 |
---|
這些步驟按照大約的順序列出。 您可能會想要同時操作這些工作、根據您自己的情況重新排列它們,以及在開始專案中的各個反覆項目時重新審核這些工作。 |
建立圖層圖表 (針對整個應用程式或其中一個圖層)。
定義圖層以代表應用程式的主要功能區域或元件。 根據其功能命名這些圖層,例如「展示」或「服務」。 如果您有 Visual Studio 方案,您可以讓每個圖層與「成品」(Artifact) 的集合 (例如專案、命名空間、檔案等等) 產生關聯。
找出圖層之間的現有相依性。
編輯圖層和相依性,以便顯示您想要讓程式碼反映的更新設計。
設計應用程式的新區域,方法是建立圖層來代表主體架構區塊或元件,以及定義相依性來顯示每個圖層如何使用其他圖層。
編輯圖表的版面配置和外觀來協助您與同事討論圖表。
針對圖層圖表驗證程式碼,以凸顯程式碼與您所需要之架構之間的衝突。
更新程式碼以符合您的新架構。 反覆開發和重構程式碼,直到驗證沒有顯示任何衝突為止。
在建置流程中加入圖層驗證,以便確保程式碼繼續遵守您的設計。
建立圖層圖表
圖層圖表必須建立在模型專案內。 您可以將新圖層圖表加入到現有模型專案,或在方案中為新圖層圖表建立新模型。
若要將新圖層圖表加入到現有模型專案
按一下 [架構] 功能表上的 [新增圖表]。
在 [範本] 底下,按一下 [圖層圖表]。
為圖表命名。
在 [加入至模型專案] 中,瀏覽並選取方案中的現有模型專案。
-或-
按一下 [建立新模型專案],將新的模型專案加入至方案。
注意事項 圖層圖表必須存在於模型專案之內。 但是,您可以將它連結到存在於方案中任何位置的成品。
您也可以在相同模型專案中複製現有圖層圖表。
注意事項 |
---|
不要從模型專案將現有圖層圖表加入、拖曳、複製或到其他模型專案或方案中的其他位置。 以此方法所複製的圖層圖表會和原始圖表擁有相同的參考,即使您已修改此圖表也一樣。 這樣會導致圖層驗證無法正確執行,同時可能會造成其他問題,例如項目遺失或嘗試開啟圖表時發生其他錯誤。 |
若要複製圖層圖表,請執行下列步驟:
若要複製現有圖層圖表
將新圖層圖表加入至模型專案。
將來源圖層圖表中的項目複製到新圖層圖表。
定義圖層以代表功能區域或元件
圖層代表「成品」(Artifact) 的邏輯群組,例如專案、程式碼檔案、命名空間、類別和方法。 您可以從 Visual Studio 方案中的成品建立圖層,或藉由連結文件 (例如 Word 檔或 PowerPoint 簡報) 將規格或計劃附加到圖層。 每個圖層會以矩形形狀出現在圖表上,並顯示連結到該圖層的成品數目。 圖層可以包含巢狀圖層,以描述更詳細的工作。
依照一般的方針,根據其功能命名圖層,例如「展示」或「服務」。 如果成品彼此緊密相依,您就應該將它們放置在相同的圖層中。 可分別更新或用於不同應用程式中的成品,則應該放置在不同的圖層中。 若要深入了解圖層模式,請造訪「模式和實務」網站,網址為:https://go.microsoft.com/fwlink/?LinkId=145794 (英文)。
注意事項 |
---|
有些類型的成品可以連結至圖層,但是不支援根據圖層圖表進行驗證。 若要了解成品是否支援驗證,請開啟 [圖層總管],然後檢查成品連結的 [支援驗證] 屬性。 如需詳細資訊,請參閱管理圖層與成品之間的連結。 |
當您更新不熟悉的應用程式時,可能會使用相依性圖形來協助探索和了解程式碼。 這些圖形可以協助您找出程式碼中的叢集和相依性。 您可能也會使用 [架構總管] 探索命名空間和類別 (這通常會正確對應至現有的圖層)。 這可讓您更輕鬆地將成品指派給圖層。 然後,您就可以使用圖層圖表來協助更新程式碼。
如需詳細資訊,請參閱下列主題:
使用下列工作來建立圖層:
若要 |
請執行這些步驟 |
---|---|
建立單一成品的圖層 |
|
為所有選取的成品建立單一圖層 |
同時將選取的成品拖曳至圖層。 圖層會出現在圖表上,並且連結到整組成品。 |
為每個選取的成品建立圖層 |
按住 SHIFT 鍵不放,同時將所有成品拖曳至圖層圖表。
注意事項
如果您使用 SHIFT 鍵來選取某個範圍的項目,請在選取成品之後放開該鍵。將成品至拖曳圖表時,再次按住該鍵不放。
每個成品的圖層會出現在圖表上,並且連結到該成品。 |
將成品加入至圖層 |
將成品拖曳至圖層。 |
建立新的未連結圖層 |
在 [工具箱] 中,展開 [圖層圖表] 區段,然後將 [圖層] 拖曳至圖層圖表。 若要加入多個圖層,請按兩下 [圖層] 工具。 當您完成後,請按一下 [指標] 工具,或按 ESC 鍵。 -或- 以滑鼠右鍵按一下圖層圖表、指向 [加入],然後按一下 [圖層]。 例如,您可以這樣做,來代表您尚未開始開發的應用程式部分。 在早期階段中,針對這類圖層建立預留位置程式碼時,這是很有用的作法。 |
建立巢狀圖層 |
將現有的圖層拖曳至另一個圖層上。 -或- 以滑鼠右鍵按一下圖層、指向 [加入],然後按一下 [圖層]。 |
建立包含兩個或多個現有圖層的新圖層 |
選取圖層、以滑鼠右鍵按一下選取的圖層,然後按一下 [群組]。 |
變更圖層的色彩 |
將圖層的 [色彩] 屬性設定為所要的色彩。 |
指定與圖層關聯的成品不可相依於指定的命名空間 |
在圖層的 [Forbidden Namespace Dependencies] 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
指定與圖層關聯的成品不可屬於指定的命名空間 |
在圖層的 [Forbidden Namespaces] 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
指定與圖層關聯的成品必須屬於其中一個指定的命名空間 |
在圖層的 [Required Namespaces] 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
管理圖層與成品之間的連結
在圖層圖表上,以滑鼠右鍵按一下圖層,然後按一下 [檢視連結]。
[圖層總管] 會顯示連結至所選圖層的成品。 若要查看圖表上連結至圖層的所有成品,請按一下圖表。
使用下列工作來管理這些連結:
若要
在圖層總管中
刪除圖層與成品之間的連結
以滑鼠右鍵按一下成品連結,然後按一下 [刪除]。
將連結從某個圖層移到另一個圖層
將成品連結拖曳至圖表上的現有圖層。
-或-
以滑鼠右鍵按一下成品連結,然後按一下 [剪下]。
在圖層圖表上,以滑鼠右鍵按一下圖層,然後按一下 [貼上]。
將連結從某個圖層複製到另一個圖層
以滑鼠右鍵按一下成品連結,然後按一下 [複製]。
在圖層圖表上,以滑鼠右鍵按一下圖層,然後按一下 [貼上]。
從現有的成品連結建立新的圖層
將成品連結拖曳至圖表上的空白區域。
確認連結的成品支援針對圖層圖表進行驗證。
查看成品連結的 [支援驗證] 資料行。
不支援根據圖層圖表進行驗證的成品包括 C++ 專案、網站、Office 文件和純文字檔。 雖然您可以將這類成品連結至圖層,不過驗證程序將會忽略它們。 對於連結至個別圖層之專案或組件的參考,如果這些圖層之間沒有任何相依性,則不會出現驗證錯誤。 除非程式碼使用這些參考,否則不會考量此類參考的相依性。
找出圖層之間的現有相依性
只要與某個圖層關聯的成品參考到與另一個圖層關聯的成品,相依性便會存在。 例如,某個圖層中的類別會宣告在另一個圖層中具有類別的變數。 您可以對現有相依性進行反向工程,以探索這些相依性。
注意事項 |
---|
您無法針對特定種類的成品進行其相依性的反向工程。 例如,對連結到文字檔的圖層進行反向工程時,無法找出與該圖層之間的任何相依性。 若要查看哪些成品具有可施以反向工程的相依性,請在一個或多個圖層上按一下滑鼠右鍵,然後按一下 [檢視連結]。 在 [圖層總管] 中,檢查 [支援驗證] 資料行。 如果成品的這個資料行顯示 [False],則無法進行該成品的相依性反向工程。 |
若要對圖層之間的現有相依性進行反向工程
- 選取一個或多個圖層、以滑鼠右鍵按一下選取的圖層,然後按一下 [產生相依性]。
通常,您會看到一些不應該存在的相依性。 您可以編輯這些相依性,以便與預期的設計保持一致。
編輯圖層與相依性以顯示預定設計
您可以編輯圖表以反映更新的設計,藉以說明您計劃對系統進行的變更。 您也可以考慮進行某些重構變更,以便在擴充程式碼前改善其結構。 如需詳細資訊,請參閱改善程式碼的結構。
若要 |
請執行這些步驟 |
---|---|
刪除不應該存在的相依性 |
按一下相依性,然後按下 DELETE。 |
變更或限制相依性的方向 |
設定其 [Direction] 屬性。 |
建立新的相依性 |
使用 [相依性] 和 [雙向相依性] 工具。 若要繪製多個相依性,請按兩下工具。 當您完成後,請按一下 [指標] 工具,或按 ESC 鍵。 |
指定與圖層關聯的成品不可相依於指定的命名空間 |
在圖層的 [Forbidden Namespace Dependencies] 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
指定與圖層關聯的成品不可屬於指定的命名空間 |
在圖層的 [Forbidden Namespaces] 屬性中輸入命名空間。 請使用分號 (;) 來分隔命名空間。 |
指定與圖層關聯的成品必須屬於其中一個指定的命名空間 |
在圖層的 [Required Namespaces] 屬性中輸入命名空間。 請使用分號 (;) 分隔命名空間。 |
改善程式碼的結構
重構變更是不會影響應用程式行為,但有助於程式碼在未來更容易變更和擴充的改良作業。 結構完善的程式碼具有方便您擷取至圖層圖表的設計。
例如,如果您針對程式碼中的每個命名空間建立圖層,然後對相依性進行反向工程,則圖層之間應該至少都有一組單向相依性。 如果您使用類別或方法做為圖層而建立更詳細的圖表,其結果應該也會具有相同的特性。
若非如此,就表示此程式碼將很難在其生命週期內變更,而且較不適合使用圖層圖表進行驗證。
設計應用程式的新區域
當您開始進行新專案的開發,或在新專案中進行新的區域時,您可以先繪製圖層和相依性來協助識別主要元件,然後再開始開發程式碼。
盡可能在圖層圖表中顯示可識別的架構模式。 例如,描述桌面應用程式的圖層圖表可能會包含展示、領域邏輯和資料存放區之類的圖層。 涵蓋應用程式之單一功能的圖層圖表可能會有模型、檢視表和控制站之類的圖層。 如需這類模式的詳細資訊,請參閱模式和實務:應用程式架構 (英文)。
如果您經常建立類似的模式,請建立自訂工具。 如需詳細資訊,請參閱 HOW TO:定義自訂模型工具箱項目。
建立每個圖層的程式碼成品,例如命名空間、類別或元件。 這樣可讓您更輕鬆地追蹤程式碼,以及將程式碼成品連結至圖層。 一旦您建立每個成品之後,請將它連結到適當的圖層。
您不需要將大部分類別和其他成品連結至圖層,因為它們都位於您已經連結至圖層的較大成品內部 (例如命名空間)。
針對新功能建立新的圖表。 通常,您會有一個或多個描述整個應用程式的圖層圖表。 如果您正在應用程式內部設計新功能,請勿加入或變更現有的圖表。 請改為建立您自己的圖表,以便反映新的程式碼組件。 新圖表中的圖層可能包括新功能的展示、領域邏輯和資料庫層。
當您建置應用程式時,就會針對整體圖表和更詳細的功能圖表驗證程式碼。
編輯版面配置以便展示和討論
為協助您識別圖層和相依性,並且方便與小組成員討論相關內容,請以下列方式編輯圖表的外觀和配置:
變更圖層的大小、圖案和位置。
變更圖層和相依性的色彩。
- 選取一個或多個圖層或相依性、按一下滑鼠右鍵,然後按一下 [屬性]。 在 [屬性] 視窗中,編輯 [Color] 屬性。
針對圖表驗證程式碼
在完成圖表的編輯後,您可以隨時以手動方式根據程式碼驗證此圖表,或在每次執行本機組建時自動驗證。 您也可以在每次使用 Team Foundation Server 建置時自動執行驗證。
如需詳細資訊,請參閱:
在建置流程中包含圖層驗證
若要手動加入組件或專案以進行驗證
在 [方案總管] 中,以滑鼠右鍵按一下模型專案或 [圖層參考] 資料夾,然後按一下 [加入參考]。
在 [加入參考] 對話方塊中選取組件或專案,然後按一下 [確定]。
若要從開啟的圖層圖表手動驗證程式碼
以滑鼠右鍵按一下圖表介面,然後按一下 [驗證架構]。
注意事項 根據預設,圖層圖表 (.layerdiagram) 檔案的 [建置動作] 屬性會設為 [驗證],以便在驗證程序中納入圖表。
[錯誤清單] 視窗會報告發生的任何錯誤。 如需驗證錯誤的詳細資訊,請參閱認識圖層驗證錯誤。
若要檢視每個錯誤的來源,請按兩下 [錯誤清單] 視窗中的錯誤。
注意事項 Visual Studio 可能會顯示相依性圖形,而非錯誤來源。 如果程式碼具有並非由圖層圖表所指定的組件相依性,或是程式碼遺失了圖層圖表所指定的相依性,則會出現此情況。 請檢閱相依性圖形或程式碼,以判斷相依性是否應存在。 如需相依性圖形的詳細資訊,請參閱 HOW TO:瀏覽和巡覽圖形文件。
若要管理錯誤,請參閱更新程式碼以符合新的架構。
若要從命令提示字元手動驗證程式碼
開啟 Visual Studio 命令提示字元。
若要開啟命令提示字元,請按一下 [開始]、依序指向 [所有程式]、[Microsoft Visual Studio 2010] 和 [Visual Studio Tools],然後按一下 [Visual Studio 2010 命令提示字元]。
選擇下列其中一項:
若要根據方案中的特定模型專案來驗證程式碼,請使用下列自訂屬性執行 MSBuild。
msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
-或-
瀏覽至包含模型專案 (.modelproj) 檔案和圖層圖表的資料夾,然後使用下列自訂屬性執行 MSBuild:
msbuild /p:ValidateArchitecture=true
若要根據方案中的所有模型專案來驗證程式碼,請使用下列自訂屬性執行 MSBuild:
msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true
-或-
瀏覽至方案資料夾 (其中必須包含圖層圖表所在的模型專案),然後使用下列自訂屬性執行 MSBuild:
msbuild /p:ValidateArchitecture=true
發生的任何錯誤都將列出。 如需 MSBuild的詳細資訊,請參閱 MSBuild和 MSBuild 工作。
如需了解驗證錯誤的詳細資訊,請參閱認識圖層驗證錯誤。
若要從本機組建自動驗證程式碼
- 使用文字編輯器來開啟模型專案 (.modelproj) 檔案,然後加入下列屬性:
<ValidateArchitecture>true</ValidateArchitecture>
-或-
在 [方案總管] 中,以滑鼠右鍵按一下包含一個或多個圖層圖表的模型專案,然後按一下 [屬性]。
在 [屬性] 視窗中,將模型專案的 [驗證架構] 屬性設為 [True]。
這會將模型專案納入驗證程序中。
在 [方案總管] 中,按一下要用於驗證作業的圖層圖表 (.layerdiagram) 檔案。
在 [屬性] 視窗中,確定圖表的 [建置動作] 屬性已設為 [驗證]。
這會將圖層圖表納入驗證程序中。
如需了解驗證錯誤的詳細資訊,請參閱認識圖層驗證錯誤。 若要管理錯誤,請參閱更新程式碼以符合新的架構。
更新程式碼以符合新的架構
在您第一次根據更新的圖層圖表驗證程式碼時,通常會出現錯誤。 這些錯誤的可能成因如下:
成品指派給錯誤的圖層。 在此情況下,請移動成品。
類別之類的成品以與架構發生衝突的方式使用另一個類別。 在此情況下,請重構程式碼以移除相依性。
若要解決這些錯誤,請更新程式碼直到驗證時不再出現錯誤為止。 這通常是反覆進行的程序。
注意事項 |
---|
當您開發或重構程式碼時,可能必須將新的成品連結至圖層圖表。 但不一定有此必要。例如,如果您的圖層代表現有的命名空間,而且新的程式碼只是將更多資料加入至這些命名空間,就不需要進行此動作。 |
在開發過程中,您可以隱藏驗證期間已報告過的某些衝突。 例如,您可能會想要隱藏已經處理的錯誤,或是與特定情節無關的錯誤。 當您隱藏錯誤時,最好在 Team Foundation 中記錄工作項目。
若要針對驗證錯誤建立工作項目
- 在 [錯誤清單] 視窗中,以滑鼠右鍵按一下警告、指向 [建立工作項目],然後按一下您要建立的工作項目類型。
使用下列工作來管理 [錯誤清單] 視窗中的驗證錯誤:
若要 |
請依照下列步驟: |
---|---|
在驗證期間隱藏選取的錯誤 |
以滑鼠右鍵按一下一個或多個選取的錯誤、指向 [管理驗證錯誤],然後按一下 [隱藏錯誤]。 隱藏的錯誤會以刪除線的格式出現。 當您下一次執行驗證時,這些錯誤將不會出現。 隱藏的錯誤會在對應圖層圖表檔案的 .suppressions 檔案中追蹤。 |
停止隱藏選取的錯誤 |
以滑鼠右鍵按一下一個或多個選取的隱藏錯誤、指向 [管理驗證錯誤],然後按一下 [停止隱藏錯誤]。 選取的隱藏錯誤將會在下一次執行驗證時出現。 |
在 [錯誤清單] 視窗中還原所有隱藏的錯誤 |
以滑鼠右鍵按一下 [錯誤清單] 視窗中的任何位置、指向 [管理驗證錯誤],然後按一下 [顯示所有隱藏的錯誤]。 |
在 [錯誤清單] 視窗中隱藏所有隱藏的錯誤 |
以滑鼠右鍵按一下 [錯誤清單] 視窗中的任何位置、指向 [管理驗證錯誤],然後按一下 [隱藏所有隱藏的錯誤]。 |
在建置流程中包含圖層驗證
若要確保未來對程式碼的變更能符合圖層圖表,請將圖層驗證納入方案的標準建置流程。 每當其他小組成員建置方案時,程式碼與圖層圖表中相依性之間的任何差異都會報告成建置錯誤。
若要在執行 Team Foundation Build 時驗證程式碼
在 [Team 總管] 中,按兩下組建定義,然後按一下 [處理序]。
在 [建置流程參數] 底下,展開 [編譯],然後在 [MSBuild 引數] 參數中輸入下列內容:
/p:ValidateArchitecture=true
如需詳細資訊,請參閱使用預設範本定義組建。