基於jQuery建立前端消息框架

      最開始設計一個模塊時,覺得這個模塊特別適合觀察者模式,遂就在模塊中大量使用這種模式。不過,這種實踐很快遇到了新問題,當模塊複雜到一定程度的時間,發現每次建立觀察者關係,都要引入被觀察者模塊,強迫地讓觀察者感知到有這樣一個比較大的被觀察者存在!這樣的編程約束,對於明顯沒有太多聯繫、距離較遠的模塊或被觀察者與系統內其他模塊有比較普遍聯繫,就帶來了引入模塊強迫,不夠自由!
    因爲現在的前端應用,基本上構建於jQuery之上,我們就想到了,是否可以借用jQuery裏面的off/on的事件機制,進行各前端組件間的發消息呢?!

   迅速地 實踐了這種解決方案,效果還是讓我覺得驚訝不已!

   消息的引入,使得模塊之間的耦合性減弱,模塊編碼時自由度增加了!而且影響更長遠的是,同時,給整個前端帶來了一個消息框架!

    任何組件可以在任何有需要的情況下進行發消息,作爲被觀察者,而消息的受衆,觀察者,可以有選擇地進行處理消息!這裏面組件所需要了解的接口,就是消息定義自身,而非被觀察者大的定義,組件間“接口”被封裝成爲一個更小的粒度!
    進一步的深究,第二次燃起了我們的驚訝。因爲,我們最初的方案通過jQuery生成一個空的HTML DIV對象進行消息的on/off/trigger操作;而同事在網上翻閱、參考了其它文章後,發現在jQuery體系內有更好的消息框架代碼。
  
    /**
     * jquery觀察者模式消息框架
     */
    (function ($) {
   /*閉包內對象,屏蔽外界訪問;利用空對象作爲jQuery入參,可以僅構造一個與HTML無關的jQuery輕量級對象,但這已經足夠使用到jQuery的消息框架了*/
        var o = $({});

       /*擴展jQuery方法。方法名借用常用的訂閱機制術語*/
        $.subscribe = function () {
            o.on.apply(o, arguments);
            return this;
        };


        $.unsubscribe = function () {
            o.off.apply(o, arguments);
            return this;
        };


        $.publish = function () {
            o.trigger.apply(o, arguments);
            return this;
        };


    } (jQuery));

jQuery這個前端組件還是非常強的,從它出來後,讓幾乎所有的HTML前端應用都基於它進行上層開發,而以jQuery爲基礎,再次擴展出一個前端消息框架也是非常棒的實踐!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章