淺談如何用Visual Studio 2010搭建架構(gòu)
Posted on 2011-07-26 10:40 Saar閱讀(185) 評論(0)編輯收藏
Layer Diagram 最早應(yīng)該出現(xiàn)在TechEd 2008,它不僅可以清晰展示應(yīng)用程序架構(gòu),而且能夠?yàn)閹椭軜?gòu)師隨時(shí)檢驗(yàn)代碼之間的引用關(guān)系是否與層圖一致,可謂既好看又好用。本文以Visual Studio 2010為例,一步步看來看如何為一個(gè)應(yīng)用程序創(chuàng)建層圖并且以此來對應(yīng)用程序進(jìn)行校驗(yàn)。
首先來看“好看”的部分,這是我為最近的一個(gè)小項(xiàng)目畫的層圖:
呵呵,我美工功底較差,顏色問題啥的大家湊合一下吧;這個(gè)層圖“好看”在于:
其一,它把整個(gè)解決方案的架構(gòu)信息清楚的呈現(xiàn)出來了(色塊)——從***下的數(shù)據(jù)訪問,中間的業(yè)務(wù)邏輯,夾在業(yè)務(wù)邏輯和ViewModel中間的服務(wù),再到上面的ViewModel和UI,一目了然;
其二,各層之間的依賴關(guān)系明確(箭頭)——服務(wù)層依賴于業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層依賴于數(shù)據(jù)訪問層,這三個(gè)層都依賴于實(shí)體層,實(shí)體層不依賴于任何其它層……
怎么畫出來的?以一個(gè)最簡單的三層架構(gòu)的代碼為例:
創(chuàng)建一個(gè)三層架構(gòu)的項(xiàng)目,或者你敢不敢下載下面的代碼試試^v^:
?。║I-BLL-DAL)
?。ㄓ捎谑窍螺d的代碼,VS可能會有安全提示)
點(diǎn)擊主菜單Architecture –>New Diagram:
選擇“Layer Diagram”,給它取個(gè)名字:
此時(shí),VS會要求我們建一個(gè)Modeling的項(xiàng)目來容納層圖。
一樣,取名,確定就行了。
這樣,我們的***個(gè)層圖就創(chuàng)建好了——空的啊。
讓我們來給它添一些層。首先,從UI開始,點(diǎn)擊工具箱里的層,然后,在層圖設(shè)計(jì)器上點(diǎn)擊一下,一個(gè)層就建好了。雙擊Layer1,改名叫“UI”。
同樣操作,我們?yōu)锽LL、DAL和Entity建立各自的層。
為層與層之間設(shè)置依賴關(guān)系。從工具箱選擇“依賴”(單向箭頭),從UI畫向BLL,表示:UI對BLL有直接依賴。同樣的方法,讓BLL依賴于DAL,這三個(gè)層同時(shí)依賴于Entity。
接下來,我們就要在層與實(shí)體項(xiàng)目之間建立映射。這里有一些選項(xiàng),我們可以將層映射到文件、Assemblies、命名空間、類等,映射關(guān)系的建立也可以通過解決方案瀏覽器或者架構(gòu)瀏覽器來完成。這里這使用架構(gòu)瀏覽器為例,在層與命名空間之間建立映射關(guān)系。
打開架構(gòu)瀏覽器:主菜單 –>Architecture –>Windows –>Architecture Explorer。
點(diǎn)擊Class View –>然后,把Simple3Tier.UI拽到UI層上,這樣,我們就把Simple3Tier.UI映射到了UI層上。
這樣,我們就可以看到UI層右上角多了一個(gè)1,表明它與一個(gè)對象形成了映射關(guān)系,同時(shí),點(diǎn)擊層圖上的UI,在右側(cè)的層瀏覽器(Layer Explorer)中,我們可以看到它到底映射到哪一個(gè)對象。
同樣,我們把BLL/DAL/Entity分別映射到對應(yīng)的圖形上。我們這樣項(xiàng)目的層圖就大功告成了:
完成了層圖,就可以用來驗(yàn)證應(yīng)用程序了。讓我們右擊空白區(qū)域,點(diǎn)擊“驗(yàn)證架構(gòu)”。如果你是下載的上文中提供的項(xiàng)目,那么,就應(yīng)該“中招”了^v^——3個(gè)錯(cuò)誤:
我們稍微看一下錯(cuò)誤信息:看來是因?yàn)閁I對DAL有依賴。而我們的層圖中沒有這樣的依賴關(guān)系——或者不允許這種依賴關(guān)系的存在。
因此,至少有兩種改法,***,給層圖添加一個(gè)依賴關(guān)系:從UI到DAL。我想大部分時(shí)間我們不會這么做,大家懂的;第二,修改代碼。
我們以修改代碼為例,雙擊一行錯(cuò)誤,層圖會幫助我們定位到代碼(Main方法),修改代碼如下:
- BizClass bizClass = newBizClass();
- var result = bizClass.GetMessage();
- // DAL.DataClass dataClass = new DAL.DataClass();
- // var result = dataClass.GetMessager().Message;
- System.Console.WriteLine(result);
右擊錯(cuò)誤,點(diǎn)擊“Go to”,選擇“層圖”?;氐綄訄D后,重點(diǎn)右擊驗(yàn)證。再看Error List,錯(cuò)誤就沒有了。
層圖可以幫助我們校驗(yàn)代碼依賴關(guān)系。當(dāng)代碼依賴關(guān)系與架構(gòu)不符時(shí),層圖可以幫助我們找到錯(cuò)誤代碼,以保證整個(gè)架構(gòu)不被破壞。這一點(diǎn)在大型項(xiàng)目多人開發(fā)時(shí)非常重要。
如果想要在Build時(shí)自動(dòng)進(jìn)行架構(gòu)校驗(yàn),只要修改層圖文件的Build Action屬性為Validate就可以了。
資源:
Existing Layer Diagrams: Application Architecture Guide Layer Diagrams
Skinner’s Blog: Layer Diagram
MSDN:Layer Diagrams: Guidelines
MSDN: How to: Create Layer Diagrams from Artifacts
Little knowledge is dangerous.
原文鏈接:http://www.cnblogs.com/xiaomi7732/archive/2011/07/27/2117806.html
【編輯推薦】