2009-01-05 115 views
2

我正在研究一箇中心類(主題)將包含大量數據的項目。將會有一個aspx頁面顯示這些數據,使用.net ajax。當主題從任何頁面更新時,我想要更新所有打開的頁面。我將爲此使用觀察者模式。問題是,我是否將實際的aspx頁面設置爲觀察者,還是有更好的方法來完成此操作?asp.net觀察者模式

回答

6

觀察者模式在這種情況下沒有意義。

Web(和ASP.NET)通過請求(例如來自Web瀏覽器)和響應(例如來自Web服務器)的方式工作。

觀察者模式要求主題(例如web服務器)保持對其觀察者(例如web瀏覽器)的引用並向其推送通知更新。顯然,這不適用於Web瀏覽器 - Web服務器場景。

我同意Sergio最好的方法可能是讓您的客戶端(Web瀏覽器)定期檢查資源(Web服務器)的更新。這樣做的最好方法是AJAX調用。

Gmail就是一個很好的例子,新消息在服務器上收到後很快會出現在收件箱中,而用戶不必提出明確的請求。這是通過AJAX調用完成的,它定期檢查Gmail服務器是否有新消息。

UPDATE(2012.03.01): -

最近的發展已經允許數據從Web服務器向推客戶端成爲一個更現實的可能性,例如SignalR

1

我對觀察者模式並不熟悉,但唯一的辦法是在頁面加載中放置一個JavaScript無限循環,每隔X秒鐘在服務器上調用一個AJAX方法來檢查更新。

2

塞爾吉奧是對的,你也是如此。通過Asp.Net AJAX實現這一點的最簡單方法是使用AJAX計時器控件,但是您當然不希望在所有頁面中複製該控件。更好的方法是將該功能上傳到主頁面,甚至創建一個派生自頁面的基頁面。

退房MSDN page on the Timer Control,還有一個體面的video tutorial以及。作爲設計的一個備註,我並不一定把實際的觀察者代碼放在你的代碼裏面。相反,您希望將這些事件轉發給某個基礎模型。這個想法是你的Code Behind只負責與UI有關的東西以及實現這一點的邏輯。實質上MVP/MVP中的V

此外,考慮到您正在討論一個沒有實際狀態的單個HTTP響應/請求週期,我不確定「實際」觀察模式在Web上下文中的適用情況。