新聞中心
一門好的語(yǔ)言它就要有一定的設(shè)計(jì)模式,在WCF這門技術(shù)中它也提供了許多種設(shè)計(jì)模式,有了設(shè)計(jì)模式在我們的應(yīng)用中就會(huì)很方便,我們這里就WCF設(shè)計(jì)模式中的發(fā)布-訂閱模式分析一下吧。針對(duì)事件使用原來(lái)的雙向回調(diào)通常會(huì)引入發(fā)布者與訂閱者的高度耦合。訂閱者必須知道所有發(fā)布的服務(wù)在應(yīng)用程序的位置,并連接它們。訂閱者不能識(shí)別的發(fā)布者無(wú)法通知事件的訂閱者。如果增加新的訂閱者(或者移除已經(jīng)存在的訂閱者)就會(huì)給已經(jīng)部署了的應(yīng)用程序帶來(lái)困難。

#T#無(wú)論什么時(shí)候,對(duì)于應(yīng)用程序的任何人發(fā)出的事件的一個(gè)特定類型,訂閱者都無(wú)法要求獲得通知。此外,訂閱者必須為每個(gè)發(fā)布者發(fā)出多個(gè)昂貴的調(diào)用,不管是訂閱還是取消訂閱。不同的發(fā)布者可能會(huì)觸發(fā)相同的事件,但卻為訂閱者和取消訂閱提供了略微不同的方法,自然而然給訂閱者與相關(guān)方法帶來(lái)耦合。大致相同的是,發(fā)布者只能通知它知道的訂閱者。無(wú)論是誰(shuí),如果希望接收事件,發(fā)布者都無(wú)法將消息傳遞給它,也沒(méi)有能力廣播事件。此外,所有的發(fā)布者都必須包含必要的代碼,管理訂閱者列表以及自身的發(fā)布行為。這些代碼幾乎與服務(wù)要解決的業(yè)務(wù)問(wèn)題無(wú)關(guān),如果還要提供一些高級(jí)特性,例如并發(fā)發(fā)布,就會(huì)增加相當(dāng)大的復(fù)雜度。
而且,基于雙向的回調(diào)同樣會(huì)引入發(fā)布者與訂閱者生命周期的耦合度。為了訂閱和接收事件,必須運(yùn)行訂閱者。訂閱者無(wú)法詢問(wèn)事件是否被觸發(fā),而應(yīng)用程序則需要?jiǎng)?chuàng)建一個(gè)訂閱者的實(shí)例,讓它處理該事件。安全性則代表了另外一種耦合:訂閱者需要通過(guò)各種安全模式以及使用的證書,以具備驗(yàn)證所有發(fā)布者的能力。同時(shí),發(fā)布者也需要具有足夠的安全證書,從而允許觸發(fā)事件,不同的發(fā)布者可能具有不同的角色成員機(jī)制。
最后,必須以編程方式設(shè)置訂閱信息。我們很難通過(guò)管理方式在應(yīng)用程序中配置訂閱信息,或者在系統(tǒng)運(yùn)行時(shí),改變訂閱者的選項(xiàng)。這些問(wèn)題實(shí)際上不是WCF雙向調(diào)用所特有的,過(guò)去的技術(shù)例如COM連接點(diǎn)或者.NET委托同樣具有這樣的特性。所有這些都屬于緊密耦合的事件管理機(jī)制。
WCF設(shè)計(jì)模式發(fā)布-訂閱
若要解決以上提及的問(wèn)題,可以使用已知的發(fā)布-訂閱設(shè)計(jì)模式對(duì)它們進(jìn)行設(shè)計(jì)。該模式所隱藏的含義很簡(jiǎn)單:通過(guò)引入一個(gè)專門的訂閱服務(wù),以及一個(gè)專門的發(fā)布服務(wù),解除發(fā)布者與訂閱者之間的耦合,如圖所示。
圖一個(gè)發(fā)布-訂閱系統(tǒng)
需要訂閱事件的訂閱者注冊(cè)訂閱服務(wù),該服務(wù)負(fù)責(zé)管理訂閱者列表,同時(shí)為取消訂閱提供了相似的功能。同樣,所有發(fā)布者均使用發(fā)布服務(wù)觸發(fā)它們的事件,避免將事件直接傳遞給訂閱者。訂閱和發(fā)布服務(wù)提供了一個(gè)間接層,從而解除了與系統(tǒng)之間的耦合。訂閱者不需要了解發(fā)布者的身份。它們能夠訂閱事件類型,以及接收任何發(fā)布者的事件,并且訂閱機(jī)制對(duì)于所有訂閱者都是統(tǒng)一的。事實(shí)上,發(fā)布者不需要管理任何訂閱列表,也不用關(guān)心訂閱者是誰(shuí)。它們會(huì)將事件傳遞給發(fā)布服務(wù),然后再傳遞給需要事件的訂閱者,上述就是一個(gè)WCF設(shè)計(jì)模式的一個(gè)簡(jiǎn)單介紹。
新聞標(biāo)題:演示W(wǎng)CF設(shè)計(jì)模式之發(fā)布-訂閱
本文地址:http://www.dlmjj.cn/article/djeippj.html


咨詢
建站咨詢
