Agile Framework功能介紹(2):架構事件模型

來源:互聯網
上載者:User

上一回簡單介紹了一下Agile Framework的事件自動連接功能,這次來詳細介紹一下事件功能的實現原理。

在Agile Framework中,只要為組件分別標記上EventPublisher和EventSubscriber就可以自動實現互相之間的串連,實現了事件的完全解耦。這個功能和Castle容器的EventWiringFacility的功能很像(在Composite UI Application Block中也有同樣的事件機制)。但是和它們不同的是,Castle和CAB都只支援同一個容器內的事件互相串連。而Agile Framework的容器是分布式的,用戶端組件和伺服器組件都可以被加入到容器中,因此,Agile Framework的事件傳遞機制也是分布式的。簡單的說,在伺服器的業務組件中定義的事件也可以被用戶端的組件接收到。

為了實現這個功能首先需要解決一個難題:因為Agile Framework可以同時支援Web Service和Remoting資料轉送介面(只需要在設定檔中簡單的修改一下配置,架構採用什麼類型的傳輸介面對開發人員來說是完全透明的),所以就必須讓事件傳遞機制同時支援這兩種介面。用Remoting還比較好解決,因為Remoting本身就支援遠端事件機制。但是Web Service就麻煩了,它只支援簡單請求/響應的無狀態訪問模型,無法主動讓伺服器發訊息給用戶端。

Agile Framework採用的Event Dispatch機制比較完美的解決了這個問題,以下是架構的事件模型圖:

在整個結構中,Event Dispather是所有事件的中轉站,它訂閱了系統中所有的事件,並且知道每一個事件接受者。

事件的傳遞機制簡單描述如下:

當Event Dispatcher接收到一個被觸發的事件後,他會檢查事件訂閱列表,逐一將事件分發到每個接收者,根據事件接收者所處的位置不同,這時會有如下幾種不同的情況:

  1. 假如事件接受者就在容器內部,Event Dispatcher會直接將事件發送到該接收者。
  2. 假如事件接收者是在用戶端(Smart Client)並且介面是Remoting,Event Dispatcher會調用Remoting的遠程介面將事件發送到用戶端。
  3. 假如事件接收者是在用戶端(Smart Client)並且介面是Web Service,Event Dispatcher會將事件發送給一個叫Event Holder的對象,這個對象負責接收所有發送給用戶端的事件,並且儲存下來。在用戶端架構會有一個叫Event Detector的對象定時通過Web Service進行輪詢來檢查EventHolder中的事件。假如有事件是被發送到該用戶端的,就會接受該事件數目據並轉寄給用戶端的事件接收方法。
  4. 如果事件接收者是Web頁面,在Agile Framework中也有一個功能類似Event Detector的Ajax對象也會對Event Holder進行輪詢。因此在Agile Framework中業務組件所定義的事件也能被Web頁面對象接收到。

以上就是Agile Framework事件分發機制的基本原理。Agile Framework是一個開源的基於.Net 2.0技術的中介軟體平台,目前正在開發中,更多資訊請訪問敏捷實驗室。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.