教你如何用好Visual Studio 2010層次驗(yàn)證
原創(chuàng)【51CTO經(jīng)典譯文】在之前的“我喜歡的特性”這篇博文中,我講到如何利用Visual Studio 2010終極版的“依賴關(guān)系圖”特性去理解系統(tǒng)的結(jié)構(gòu)關(guān)系。親自動(dòng)手完成一個(gè)項(xiàng)目對(duì)加深所了解的知識(shí)是很有益處的。接下來(lái),我要講的就是層次驗(yàn)證(Layer Validation),它能夠進(jìn)一步改善程序的架構(gòu)。
建立一個(gè)層次圖(Layer Diagram)
我們將使用上篇博文的“Tailspin Toys”應(yīng)用程序來(lái)進(jìn)行說(shuō)明。既然我們已經(jīng)知道這個(gè)應(yīng)用程序的基本結(jié)構(gòu),接下來(lái)的目標(biāo)就是讓它和我們的架構(gòu)能夠很好的結(jié)合到一起。在這個(gè)例子中,應(yīng)用程序所采用的是模型-試圖-控制器(MVC)架構(gòu)。我們需要確認(rèn)的是,它真的是按照這種架構(gòu)模式來(lái)實(shí)現(xiàn)的。首先,我們通過(guò)Architecture(架構(gòu))菜單新建一個(gè)層次圖:
它將產(chǎn)生一個(gè)空的層次圖,我們可以在其中指定和規(guī)劃我們的架構(gòu)層次。不需做太多的工作,我們就可以在窗口上看到所有的基本層次:
雖然這看上去是一個(gè)合理的架構(gòu),但是我們需要確認(rèn)物理實(shí)現(xiàn)是否真的和邏輯上的結(jié)構(gòu)一一對(duì)應(yīng)。要做到這一點(diǎn),我們可以把類的實(shí)現(xiàn)拖動(dòng)到相應(yīng)的實(shí)現(xiàn)層次上:
當(dāng)把類的實(shí)現(xiàn)放置在正確的層次上后,右鍵點(diǎn)擊Design Surface(設(shè)計(jì)圖面)-> Generate Dependencies(產(chǎn)生依賴關(guān)系)就可以得到相應(yīng)的依賴關(guān)系圖:
一旦按照上面的步驟完成整個(gè)過(guò)程,你將會(huì)得到類似于下面的一個(gè)圖。層次資源管理器(Layer Explorer)可以用來(lái)瀏覽每一層次中的具體內(nèi)容:
#p#
改進(jìn)你的實(shí)施方法:
在這里我們有一副圖描述了哪些已經(jīng)被實(shí)際構(gòu)建。但是我對(duì)這幅圖有一個(gè)疑問(wèn):在MVC模式中我們不想讓View直接和Model對(duì)話。這種情況往往發(fā)生在所寫的代碼直接訪問(wèn)數(shù)據(jù)層而沒(méi)有通過(guò)適當(dāng)?shù)臉I(yè)務(wù)邏輯層(一個(gè)很容易犯的低級(jí)錯(cuò)誤)。下面就讓我們通過(guò)刪除這一個(gè)“箭頭符號(hào)”來(lái)解決這個(gè)問(wèn)題:
在我們刪除這一“箭頭符號(hào)”后,我們可以用鼠標(biāo)右鍵單擊圖形,然后選擇驗(yàn)證架構(gòu)(Validate Architecture):
在這里,Visual Studio將會(huì)分析所有的依賴關(guān)系,并查找其中任何違背這個(gè)層次圖的依賴關(guān)系,然后錯(cuò)誤就會(huì)出現(xiàn)在錯(cuò)誤列表中:
現(xiàn)在,我可以瀏覽并修改我的代碼了,并重復(fù)使用驗(yàn)證架構(gòu)直到?jīng)]有任何錯(cuò)誤為止。
在構(gòu)建中執(zhí)行分層:
這里我有一個(gè)清晰的架構(gòu)和相應(yīng)的實(shí)施方法。我們都知道接下來(lái)將發(fā)生什么:由于任務(wù)被執(zhí)行、錯(cuò)誤被修復(fù),該代碼將再次從架構(gòu)中漂移(drift)。因此我們需要找到一種方法來(lái)保持同步。
為了解決這個(gè)問(wèn)題,我們將添加一個(gè)新的TFS Build Definition,通過(guò)運(yùn)用Gated Check-in來(lái)執(zhí)行這一架構(gòu):
當(dāng)你運(yùn)用Gated Check-in的時(shí)候,所有你提交到TFS的變化抖必須首先通過(guò)全部的常規(guī)測(cè)試。在這種方法中,如果你存在錯(cuò)誤,所有的變化將不會(huì)被應(yīng)用,也不會(huì)進(jìn)入構(gòu)建中。在這種情況下,我們只需要在進(jìn)程選項(xiàng)卡中多加一個(gè)步驟即可。
此時(shí),構(gòu)建過(guò)程將啟動(dòng)架構(gòu)驗(yàn)證步驟,以防止任何違規(guī)事件對(duì)TFS進(jìn)行檢查。
總結(jié):
有幾個(gè)關(guān)鍵的概念需要明確:
如果你正在寫一個(gè)全新的代碼,你可以從邏輯設(shè)計(jì)開(kāi)始并朝著實(shí)現(xiàn)你設(shè)計(jì)的方向努力。
如果你是從現(xiàn)有的代碼開(kāi)始,你將發(fā)現(xiàn)你已經(jīng)擁有的東西,也能朝著一個(gè)完美的邏輯設(shè)計(jì)方向努力。
一旦你的物理和邏輯得到同步,你就可以用防止漂移(drift)的自動(dòng)方法(如gated check-in)來(lái)實(shí)現(xiàn)你的設(shè)計(jì)。
【編輯推薦】
- Visual Studio 2010中Parallel類實(shí)現(xiàn)并行計(jì)算
- Visual Studio 2010中C++項(xiàng)目升級(jí)指南
- Visual Studio 2010中測(cè)試用例工作項(xiàng)類型介紹
- 在Visual Studio 2010選擇合適的項(xiàng)目測(cè)試方法
- 細(xì)數(shù)VS 2003到Visual Studio 2010的開(kāi)發(fā)之路