|
微軟已經把VS 2010(Visual Studio 2010 Ultimate)功能融入到軟件應用生命周期管理(ALM)中。在架構設計方面則是通過新的架構層關系圖(Architecture Layer Diagram),以圖形化的方式描述系統架構,從而使得項目中的技術人員或非技術人員都能以模型透過圖形化的方式進行協作與設計,以及定義企業的系統功能。
Visual Studio 2010提供針對不同功能層面的分析工具來輔助程序代碼進行逆向工程。Layer Diagram可從高階面來看架構;Architecture Explorer能從特定點切入,只探索我們所關心的部分;.NET Class Diagram則可分析詳細部分的Class結構。逆向工程類型可分為靜態與動態,靜態指的是整個程序代碼的靜態結構,如組件或類別間的關系;動態則是程序代碼執行的順序,如某個程序代碼區段相關方法調用與響應順序。
靜態的逆向工程,主要有三個工具:Architecture Explorer、Layer Diagram和Class Diagram。Layer Diagram可以讓我們以高層角度來分析整個軟件結構,細膩程度可以自由選擇,從項目、Namespace、Classs、到方法都可以。本文將重點講述VS2010靜態逆向工程(Static Reverse Engineering)在軟件架構層關系圖設計方面的新功能應用。
Visual Studio 2010架構層關系圖設計
在現實的項目中,我們需要分析別人的代碼,或者約束團隊的代碼架構。當我們已經對現有程序的基本架構有了初步了解時,則想對現有架構進行進一步的分析并維護代碼架構的邏輯。例如,當我們的項目為模型-視圖-控制器(MVC,Model View Controller)架構風格創建架構應用的時候,讓我們確保它是實際執行的方式。
(1)創建一個層圖(Building a Layer Diagram)
首先,讓我們創建一個新層架構使用菜單(命令為Architecture|New Diagram|Layer Diagram)。創建一個空層圖,在圖層設計器中可以指定設計(在Toolbox中拖曳元素實現層設計)架構層,可以得到所有我們所確定的形式與基本層,如圖1所示。
圖1 設計MVC架構層圖類的實現
如上圖所示,這是一個典型的軟件架構,需要實現物理與邏輯架構圖的關聯,我們通過拖動相應的執行層與實際類來實現。當放入圖層類實現后,我們可以在該系統中用鼠標右鍵單擊設計圖面,在彈出的菜單中選擇Generate Dependencies(生成依賴)命令,來建立依賴關系。
一旦完成這一過程,最后將得到一個架構層圖。層管理器(Layer Explorer)可以用來看到每一層的內容,以及架構層彼此之間的關系。
(2)更新實現(Updating Your Implementation)
在MVC架構模式中,我們不希望看到“Web→Model”層的直接對話模式,這種情況往往發生在團隊中其他人編寫的代碼直接訪問了數據層,而不通過合適的業務邏輯(這是一個非常容易犯的錯誤)。可以通過圖層設計器刪除依賴線來解決。當刪除依賴線后,可以用鼠標右鍵單擊圖形,在彈出菜單中選擇Validate Architecture(驗證架構)命令,如圖2所示。
圖2 刪除錯誤邏輯
Visual Studio將分析所有的依賴和任何違反該層圖關系的查詢。這個錯誤結果將會出現在錯誤列表中,如圖3所示。
圖3 錯誤結果列表
現在,我們可以通過修復自己的代碼,重復驗證架構體系直到沒有違反層關系的代碼依賴出現為止。
(3)執行中生成分層(Enforcing Layering in the Build)
我們要保持一個干凈的架構,并且知道未來將發生的問題,例如,對錯誤的分析和驗證,可以審視到架構代碼漂移,執行開發任務時進行對該錯誤的修復。我們需要一種方法來保持同步(sync)。為了解決這個問題,我們將添加一個新的TFS生成定義,將使用門控簽入(Gated Check-in)來執行架構,如圖4所示。
圖4 設置簽入方式
當使用門控簽入后,提交所有更改到TFS中時,必須先通過所有正常的測試(干凈的構建、通過測試用例等),現在構建的做法將符合驗證步驟,并通過在TFS中的檢測來防止更多的風險侵入。
如果進行全新的代碼開發,我們就可以在開始階段通過層圖來進行邏輯設計,并努力執行設計方案,保證開發階段與設計不偏離,團隊人員的代碼不漂移出架構。如果從現有的資源框架開始,我們也可以通過Visual Studio 2010的層圖功能找到理想的邏輯分析與設計工作方法。一旦我們的物理和邏輯同步,就可以通過自動化(例如門控簽入)進行強制執行,避免“漂移”發生。
NET技術:用好Visual Studio 2010進行層架構設計,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。