使用Visual Studio 2010進(jìn)行架構(gòu)驗(yàn)證
原創(chuàng)【51CTO精選譯文】最近我參加了一個(gè)本地Visual Studio 2010啟動(dòng)儀式,當(dāng)初去的目的主要是想看看Team Foundation Server(TFS)的新特性,但真正令我印象深刻的是新增的一些架構(gòu)工具,以前我一直使用Visual Studio擴(kuò)展工具NDepend,很高興現(xiàn)在在Visual Studio 2010中對(duì)架構(gòu)工具進(jìn)行了改進(jìn),吸收了大部分NDepend的功能,請(qǐng)看版本對(duì)比表(http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx#compare),它僅在旗艦版中具有這個(gè)功能。
為了便于說明,我將使用一個(gè)假想的,有Web、業(yè)務(wù)和數(shù)據(jù)層,以及一些共享模型對(duì)象的應(yīng)用程序作為示例,如下圖所示。
圖 1 假想的應(yīng)用程序分層圖
這里沒有什么特別的,圖中顯示了每一層的名字,數(shù)字是代碼單元的編號(hào)(在這里,你可以加入獨(dú)立的命名空間或類)。為了創(chuàng)建一個(gè)圖表,我們需先創(chuàng)建一個(gè)新的Visual Studio 2010建模項(xiàng)目,在該項(xiàng)目上增加新的層圖,我使用設(shè)計(jì)器添加了形狀和依賴線,看起來還不錯(cuò),但我想讓它變得更好看。
為了將模塊放入某一層,你可以從解決方案資源管理器(Solution Explorer)或新的架構(gòu)瀏覽器(Architecture Explorer)進(jìn)行拖放,兩種方法都可以找到你想找的對(duì)象,雖然方法不一樣,但結(jié)果是一樣的,當(dāng)所有模塊分配到正確的層中后,你可以在圖表上點(diǎn)擊右鍵,然后選擇“驗(yàn)證架構(gòu)(Validate Architecture)”。
Visual Studio 2010然后就會(huì)編譯你的解決方案,并驗(yàn)證其架構(gòu),如果不出現(xiàn)錯(cuò)誤,你將會(huì)看到如下的輸出信息:
1/28/2010 4:04:17 PM: Architecture validation is starting.
1/28/2010 4:04:23 PM: Architecture validation succeeded (0 suppressed).
現(xiàn)在我們嘗試添加一個(gè)非法調(diào)用,在這里,我首先在Biz項(xiàng)目上添加一個(gè)引用,但失敗了,因?yàn)樗鼘?huì)產(chǎn)生一個(gè)循環(huán)依賴,我想這在以前的版本中一樣存在,但我卻從沒遇到過。
增加了非法調(diào)用后,我再次驗(yàn)證架構(gòu),解決方案將會(huì)重新編譯,這次的輸出信息如下:
1/28/2010 4:19:46 PM: Architecture validation is starting.
1/28/2010 4:19:55 PM: Architecture validation failed with 3 violation(s) (0 suppressed).
OK,我們的行為正如預(yù)期的那樣,點(diǎn)擊錯(cuò)誤列表,可以看到錯(cuò)誤的詳細(xì)信息。
圖 2 錯(cuò)誤列表
因此,不僅在數(shù)據(jù)層的代碼觸發(fā)事件上增加了討厭的調(diào)用,引用本身也有,從這里的錯(cuò)誤列表我們可以做許多事情。
在錯(cuò)誤上點(diǎn)擊右鍵,從彈出的右鍵菜單中選擇“管理驗(yàn)證錯(cuò)誤”,然后點(diǎn)擊“抑制錯(cuò)誤”,當(dāng)然你這么做需要冒一定的風(fēng)險(xiǎn),編譯的輸出信息如下:
1/28/2010 4:25:03 PM: Architecture validation is starting.
1/28/2010 4:25:09 PM: Architecture validation succeeded (3 suppressed).
如果你想立即修復(fù)錯(cuò)誤,你可以雙擊錯(cuò)誤信息獲取違規(guī)代碼,如果是一個(gè)正常的編譯失敗,你會(huì)看到一些語(yǔ)法錯(cuò)誤,如果你使用TFS,可以選擇“創(chuàng)建工作項(xiàng)目”基于錯(cuò)誤信息創(chuàng)建一個(gè)新的TFS工作項(xiàng)目。
通過設(shè)置建模項(xiàng)目的“驗(yàn)證架構(gòu)”參數(shù),也可以將其包括在本地編譯過程中,TFS用戶也可以增加這一步,只需要在編譯標(biāo)簽增加下面的MSBuild參數(shù)即可:
- /p:ValidateArchitecture=true
這對(duì)于團(tuán)隊(duì)構(gòu)建特別有用,因?yàn)槟憧梢宰柚箼z入可能會(huì)引起架構(gòu)問題的代碼。
我很高興地看到這些東西出現(xiàn)在VS 2010中,我不知道這些新的組件是否能達(dá)到NDepend的功能,但他們的出現(xiàn)也標(biāo)志著Visual Studio 2010的進(jìn)步,我希望這些工具能夠幫助我們真正改進(jìn),形成一個(gè)更高效的團(tuán)體。
在編寫本文的時(shí)候,我發(fā)現(xiàn)最新的NDepend 3 Beta版完全集成到Visual Studio中了,我將另起一篇比較Visual Studio 2010中的DGQL查詢和NDepend的CQL。
原文出處:http://blogs.lessthandot.com/index.php/Architect/DesigningSoftware/validating-architecture-with-visual-stud-2010
原文名:Validating Architecture with Visual Studio 2010
作者:AlexCuse
【編輯推薦】