天天看點

一起談.NET技術,用好Visual Studio 2010進行層架構設計

  微軟已經把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所示。

一起談.NET技術,用好Visual Studio 2010進行層架構設計

圖1  設計MVC架構層圖類的實作

  如上圖所示,這是一個典型的軟體架構,需要實作實體與邏輯架構圖的關聯,我們通過拖動相應的執行層與實際類來實作。當放入圖層類實作後,我們可以在該系統中用滑鼠右鍵單擊設計圖面,在彈出的菜單中選擇Generate Dependencies(生成依賴)指令,來建立依賴關系。

  一旦完成這一過程,最後将得到一個架構層圖。層管理器(Layer Explorer)可以用來看到每一層的内容,以及架構層彼此之間的關系。

  (2)更新實作(Updating Your Implementation)

  在MVC架構模式中,我們不希望看到“Web→Model”層的直接對話模式,這種情況往往發生在團隊中其他人編寫的代碼直接通路了資料層,而不通過合适的業務邏輯(這是一個非常容易犯的錯誤)。可以通過圖層設計器删除依賴線來解決。當删除依賴線後,可以用滑鼠右鍵單擊圖形,在彈出菜單中選擇Validate Architecture(驗證架構)指令,如圖2所示。

一起談.NET技術,用好Visual Studio 2010進行層架構設計
一起談.NET技術,用好Visual Studio 2010進行層架構設計

圖2  删除錯誤邏輯

  Visual Studio将分析所有的依賴和任何違反該層圖關系的查詢。這個錯誤結果将會出現在錯誤清單中,如圖3所示。 

一起談.NET技術,用好Visual Studio 2010進行層架構設計

圖3  錯誤結果清單

  現在,我們可以通過修複自己的代碼,重複驗證架構體系直到沒有違反層關系的代碼依賴出現為止。

  (3)執行中生成分層(Enforcing Layering in the Build)

  我們要保持一個幹淨的架構,并且知道未來将發生的問題,例如,對錯誤的分析和驗證,可以審視到架構代碼漂移,執行開發任務時進行對該錯誤的修複。我們需要一種方法來保持同步(sync)。為了解決這個問題,我們将添加一個新的TFS生成定義,将使用門控簽入(Gated Check-in)來執行架構,如圖4所示。

一起談.NET技術,用好Visual Studio 2010進行層架構設計

圖4  設定簽入方式

  當使用門控簽入後,送出所有更改到TFS中時,必須先通過所有正常的測試(幹淨的建構、通過測試用例等),現在建構的做法将符合驗證步驟,并通過在TFS中的檢測來防止更多的風險侵入。

  如果進行全新的代碼開發,我們就可以在開始階段通過層圖來進行邏輯設計,并努力執行設計方案,保證開發階段與設計不偏離,團隊人員的代碼不漂移出架構。如果從現有的資源架構開始,我們也可以通過Visual Studio 2010的層圖功能找到理想的邏輯分析與設計工作方法。一旦我們的實體和邏輯同步,就可以通過自動化(例如門控簽入)進行強制執行,避免“漂移”發生。