小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Event-Listerner事件監(jiān)聽模式

 CevenCheng 2011-07-28

事件監(jiān)聽模式其實(shí)就是一種觀察者模式,只是角度有點(diǎn)不同,在Java的JavaBean機(jī)制以及GUI中都使用了事件監(jiān)聽模式。在如今AJAX RIA客戶端中,事件監(jiān)聽模式也成為一個(gè)主要的界面模式。

事件監(jiān)聽模式分同步和異步兩種實(shí)現(xiàn)方式,JavaBean機(jī)制和GUI基本都是同步機(jī)制,事件監(jiān)聽異步模型,需要引入Event Queue。

事件監(jiān)聽同步模式分兩個(gè)部分:Event Source和Event Listener:
Event Source:被監(jiān)聽者的事件集合,可能是方法,提供事件的注冊加入和移除功能。類似被觀察者的集合。
Event Listener:事件的監(jiān)聽者,當(dāng)事件被觸發(fā),所有監(jiān)聽這個(gè)事件的監(jiān)聽者將被通知,然后執(zhí)行自己的Action響應(yīng)動(dòng)作。

事件監(jiān)聽異步模式在Source和Listener之間引入event queue,
event queue是一個(gè)基于事件的publish-subscribe. 它一種松耦合方式提供不同模塊和角色之間異步通訊。它比同步更加松耦合,這樣,我們就把Source-Listener改成了publish-queue-subscribe方式。

事件監(jiān)聽模式使用在客戶端RIA比較多,因?yàn)檫@里是用戶輸入的源頭,是事件發(fā)生的源頭。而且在目前WOA趨勢下,事件監(jiān)聽模式不能只單獨(dú)局限于RIA客戶端這個(gè)范圍,還需要把事件通過http形式傳遞到服務(wù)器端,也就是跨客戶端和服務(wù)器的,事件必須和服務(wù)器的PUSH異步結(jié)合在一起。這是一種先進(jìn)的架構(gòu)設(shè)計(jì)。

基于Javascript的ZK 5 RIA已經(jīng)實(shí)現(xiàn)了這種先進(jìn)的事件監(jiān)聽模式,見:
http://docs./wiki/ZK_5:_Chat_with_Event_Queue#Event_queues_and_server_push

如果將這種異步的事件模式和服務(wù)器的OSGI結(jié)合,那么在服務(wù)器端更新一個(gè)Jar模塊,可以主動(dòng)通知到客戶端瀏覽器,
這對服務(wù)器端模塊管理很有好處。
http://bundle-exception./2009/07/zk-on-osgi-dynamic-asynchronous.html


記得在Header First設(shè)計(jì)模式中,MVC被看成一種復(fù)合設(shè)計(jì)模式,是策略模式和觀察者模式的有機(jī)組合(很多其他文獻(xiàn)中把MVC層看成一種架構(gòu)風(fēng)格),其談到MVC設(shè)計(jì)CS的時(shí)候可以嚴(yán)禁的實(shí)現(xiàn)策略模式和觀察者模式,但是MVC面對BS時(shí)候尤其是現(xiàn)在主流框架在jsp/servlet上沒法支持觀察者模式,因?yàn)槟悴豢赡馨裫sp注冊為model的觀察者,所以jsp/servlet一直從根據(jù)上不支持push,以至于主流push技術(shù)都需要客戶端首先發(fā)起請求“我需要接下來的一段時(shí)間里你每10面更新一次新聞”,之后才可以開啟push。
所以我在考慮是不是可以基于freemaker封裝一個(gè)模板,然后摒棄jsp,而實(shí)現(xiàn)自己可注冊監(jiān)聽的服務(wù)頁技術(shù)呢?

嚴(yán)格來說:MVC模式是一種同步機(jī)制,MVC的Controller是Mediator模式,而Mediator模式的特點(diǎn)和缺點(diǎn)就是封裝通訊,而Observer模式則是分離通訊。

實(shí)踐證明:象Observer這種分離通訊的做法是符合可伸縮性要求的,而Mediator模式這種封裝通訊是不可伸縮的。

所以,可以說MVC模式是不可伸縮的,所以,才有REST替代一說,也可以在MVC中引入事件模式。ZK5的設(shè)計(jì)就是這種基于MVC模式基礎(chǔ)上的事件異步架構(gòu)。

所以,現(xiàn)在只是使用一個(gè)MVC的Web框架已經(jīng)遠(yuǎn)遠(yuǎn)不滿足伸縮性要求。

說得不客氣的話:現(xiàn)在所有的基于MVC框架,如Struts 2或Webwork JSF Wicket,如果不在其上引入異步事件框架,都是不合格的,都是落后的技術(shù)。


> 現(xiàn)在所有的基于MVC框架,如Struts 2或Webwork JSF Wicket,如果不在其上引入異步事件框架,都是不合格的,都是落后的技術(shù)。

我覺得這些MVC框架不支持異步是因?yàn)槠浠趈sp/servlet封裝起來的,servlet2.x 全都不支持異步,底層都不支持,指望上層架構(gòu)如何能實(shí)現(xiàn)?所以要么等servlet3.0規(guī)范為大多數(shù)應(yīng)用服務(wù)器實(shí)現(xiàn)之時(shí),要么干脆摒棄jsp/servlet和主流servlet容器,用mina封裝通訊,第三方包解析http,freemaker定制頁面模板,實(shí)現(xiàn)真正的異步。

>干脆摒棄jsp/servlet和主流servlet容器,用mina封裝通訊
這才是最靈活 最伸縮的好辦法,也是我目前推崇的。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多