有了接口,有了實(shí)做的類別,接著就可以建立主程序了。我展開(kāi) Client 項(xiàng)目,加入對(duì) Interface 和 Implementation 的參考。然后在主程序中加入以下的敘述 (當(dāng)然要記得匯入必要的命名空間):
所以我們會(huì)透過(guò) MessageReceiver 類別傳回 Message 屬性的值做為要處理的訊息。完成了這個(gè)簡(jiǎn)單的例子之后,我們就要把實(shí)做的成果和要求的模型結(jié)合在一起,看看我們的設(shè)計(jì)是否吻合架構(gòu)面的要求。要把實(shí)做的項(xiàng)目和 Layer Diagram 中定義的層次相結(jié)合,方法很簡(jiǎn)單;氐 FundamentalLayer 層次圖,然后從 solution explorer 中拖放 Client 項(xiàng)目節(jié)點(diǎn)到層次圖的 Client 層次上。此時(shí)會(huì)看到層次圖形的左上方出現(xiàn)個(gè) 1,代表它已經(jīng)和一個(gè)項(xiàng)目綁定了。同樣的方式,把 Interface 項(xiàng)目對(duì)映到 Interface 層次,Implementation 項(xiàng)目對(duì)映到 Implementation 層次。如果你選擇其中一個(gè)已經(jīng)綁定的層次,可以在 Layer Explorer (如果看不到可以從 Architecre 選單的 Window 命令中找到 Layer Explorer 把窗口調(diào)出來(lái)) 看到所綁定對(duì)象的細(xì)節(jié)。 有了項(xiàng)目和層次的對(duì)映后,接下來(lái)就有趣了。我們可以用鼠標(biāo)右鍵點(diǎn)選層次圖的表面,會(huì)看到快速選單中有一個(gè) Validate Architecture 命令,我們執(zhí)行這個(gè)命令;
進(jìn)行架構(gòu)驗(yàn)證
命令執(zhí)行完成后會(huì)看到錯(cuò)誤訊息,同時(shí)指示錯(cuò)誤發(fā)生的區(qū)域。檢視一下錯(cuò)誤內(nèi)容,會(huì)發(fā)現(xiàn)我們要求的層次依賴關(guān)系被破壞了,因?yàn)?Client 直接呼叫了 Implementation 的設(shè)計(jì) (包括參照到 Implementation 項(xiàng)目,以及直接使用 MessageReceiver 類別:
點(diǎn)擊放大
驗(yàn)證后的錯(cuò)誤
解決之道是利用 Factory 樣式,利用 Factory 建立以接口為主的方法,隔離實(shí)做和接口的關(guān)系。所以日后要傳回的訊息接收器是針對(duì)不同的訊息來(lái)源進(jìn)行處理,我們只要調(diào)整 Factory 方法,傳回對(duì)應(yīng)的接收器,原本的應(yīng)用程序不用更動(dòng),因?yàn)樗际峭高^(guò)接口決定作業(yè),只要實(shí)做了同樣接口的類別都可以套用,增加程序的彈性和維護(hù)能力。所以我們展開(kāi) Creator 項(xiàng)目,加入對(duì) Interface 和 Implementation 的參考,然后把 Class1 的名稱改成 MessageCreator。它的程序內(nèi)容如下:
MessageCreator 類別
緊接著我們移除掉Client項(xiàng)目中原本對(duì) Implementation 項(xiàng)目的參考,然后加入對(duì) Creator 項(xiàng)目的參考。并且更進(jìn)一步的把原本的主程序更改為:
這樣我們就不是直接透過(guò)實(shí)做的類別進(jìn)行訊息的存取,而是經(jīng)由 Factory 取得符合接口定義的內(nèi)容。這回我們?cè)僮鲆粋(gè)層次驗(yàn)證,可以看到成功通過(guò)設(shè)計(jì)。在這里用的是一個(gè)很小的例子,碰到大型的項(xiàng)目,還是可以透過(guò)相同的方式進(jìn)行驗(yàn)證。確保我們的程序在架構(gòu)層次面是遵循要求的。
本文鏈接:http://www.95time.cn/tech/program/2010/7538.asp
出處:相關(guān)論壇
責(zé)任編輯:bluehearts
上一頁(yè) VS2010 Layer Diagram 實(shí)例教程 [2] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|