2

私は、中央クラス(サブジェクト)に大量のデータが含まれるプロジェクトに取り組んでいます。.netajaxを使用してこのデータを表示するaspxページがあります。いずれかのページから件名を更新する場合は、開いているすべてのページを更新してほしい。これにはオブザーバーパターンを使用します。質問は、実際のaspxページをオブザーバーにするのか、それともこれを行うためのより良い方法があるのか​​ということです。

4

3 に答える 3

6

この場合、オブザーバー パターンは意味がありません。

Web (および ASP.NET) は、要求 (Web ブラウザーからなど) と応答 (Web サーバーからなど) によって機能します。

オブザーバー パターンでは、サブジェクト (Web サーバーなど) がそのオブザーバー (Web ブラウザーなど) への参照を維持し、通知の更新をそれらにプッシュする必要があります。明らかに、これは Web ブラウザーと Web サーバーのシナリオには当てはまりません。

おそらく最善の方法は、クライアント (Web ブラウザー) がリソース (Web サーバー) からの更新を定期的にチェックすることであるという Sergio の意見に同意します。これを行う最も適切な方法は、AJAX 呼び出しです。

良い例は Gmail です。新しいメッセージは、ユーザーが明示的に要求しなくても、サーバーで受信されるとすぐに受信トレイに表示されます。これは、Gmail サーバーで新しいメッセージを定期的にチェックする AJAX 呼び出しによって行われます。

更新 (2012.03.01):-

最近の開発により、Web サーバーからクライアントへのデータのプッシュがより現実的な可能性になりました (例: SignalR ) 。

于 2009-01-05T12:13:08.463 に答える
2

セルジオは正しいし、あなたもある程度そうです。Asp.Net AJAX を介してこれを実装する最も簡単な方法は、AJAX タイマー コントロールを使用することですが、すべてのページでそれを複製したくないことは確かです。より良いアプローチは、その機能をマスター ページにラップするか、Page から派生したベース ページを作成することです。

Timer Control の MSDN ページと、まともなビデオ チュートリアルも確認してください。

ただし、設計に関する補足として、実際のオブザーバー コードをコード ビハインド内に配置する必要はありません。むしろ、これらのイベントを基になるモデルに転送する必要があります。コード ビハインドは、UI 関連のものとそれを実現するためのロジックのみを担当するという考えです。基本的に、MVP/MVPのVです。

また、実際の状態のない単一の HTTP 応答/要求サイクルについて話していることを考えると、「実際の」オブザーバー パターンが Web コンテキストにどの程度適用されるかはわかりません。

于 2009-01-05T12:13:51.503 に答える
1

私はオブザーバー パターンに精通していませんが、これを行う唯一の方法は、ページの読み込み時に JavaScript の無限ループを配置し、X 秒ごとにサーバーで AJAX メソッドを呼び出して更新を確認することです。

于 2009-01-05T11:24:35.363 に答える