8

.NET 4.0 で登場する System.Reactive ライブラリの新しい IObservable/IObserver フレームワークは非常に興味深いものです (これこのリンクを参照してください)。

推測するには時期尚早かもしれませんが、(適切な用語がないため) これらの新しいインターフェイス用に構築された IQueryable のようなフレームワークもあるでしょうか?

特定の使用例の 1 つは、受信呼び出しのチェーンではなく、ソースでのイベントの前処理を支援することです。たとえば、非常に「おしゃべりな」イベント インターフェースを使用している場合、 を使用するSubscribe().Where(...)と、パイプラインを介してすべてのイベントが受信され、クライアントがフィルタリングを行います。

私が疑問に思っているのは、IQueryableObservable に似たものがあるかどうかです。これにより、これらの LINQ メソッドがSubscribeソース内の「スマート」実装に「コンパイル」されます。このようなフレームワークを使用できる特定のネットワーク サーバー アーキテクチャを想像できます。または、.NET コードが新しいデータ通知 (コード内のトリガー) を受信できるようにし、それらの通知をサーバー側でフィルター処理する必要がある SQL Server (またはその点については任意の RDBMS) へのアドオンについてはどうでしょうか。

4

5 に答える 5

9

それは、Rx の最新リリースで、IQbservable (IQueryableObservable と発音) と呼ばれるインターフェイスの形で取得されました。この件に関するチャンネル 9 のビデオを楽しみにお待ちください。来週初めに公開されます。

この機能を少し位置付けるには、概念的に Rx/Ix パズルに直交する 3 つの軸があることを認識する必要があります。

  • 対象とするデータ モデルは何か。ここでは、プル ベースとプッシュ ベースのモデルを比較します。彼らの関係は二重性に基づいています。これらの世界の間に変換が存在します (ToEnumerable など)。
  • クエリを実行する操作を実行する場所(sensu lato)。特定の演算子には同時実行が必要です。ここで、スケジューリングと IScheduler インターフェースの出番です。オペレーターは、同時実行ドメイン (ObserveOn など) 間をホップするために存在します。
  • クエリ式の実行方法。逐語的 (IL) または翻訳可能 (式ツリー) のいずれかです。彼らの関係はホモイコニシティに基づいています。両方の表現の間に変換が存在します (例: AsQueryable)。

すべての IQbservable インターフェイス (IQueryable と IObservable クエリの式ツリー表現の両方) が有効にするのは最後のポイントです。クエリ変換の動作 (「実行方法」) とリモート処理の側面 (「実行場所」) を混同する人がいます。通常、クエリをターゲット言語(WQL、PowerShell、クラウド通知サービス用の DSQL など) に変換し、リモートでターゲット システムに変換しますが、どちらの懸念も切り離すことができます。たとえば、式ツリー表現を使用して、ローカルクエリの最適化を行うことができます。

考えられるセキュリティ上の問題に関しては、これは IQueryable 機能と同じです。通常、式言語をリモートにするだけで、「真に副作用のある」演算子はリモートしません (原理主義関数型以外の言語の場合は、それが何を意味するにせよ)。特に、Subscribe 操作と Run 操作はローカルに留まり、クエリ可能なモナドから抜け出します (したがって、IQueryable の世界で GetEnumerator が行うのと同じように、変換をトリガーします)。購読という行為をどのように遠ざけるかは、読者の想像に任せます。

今日から最新のビットを試してみて、ご意見をお聞かせください。また、この新機能に関する Channel 9 のビデオにも注目してください。これには、その設計哲学の一部が含まれています。

于 2010-05-15T10:09:36.033 に答える
3

これは興味深い可能性に思えますが、これを実装することについていくつかの懸念があります。

1) IQueryable で使用される重要なラムダ式をシリアル化できないのと同様に、これらを Rx 用にシリアル化することも同様に困難です。このフレームワークの一部として、複数行のラムダとステートメントのラムダをシリアライズできるようにしたいでしょう。そのためには、Erik Meijer の他のペット プロジェクト (Dryad と Volta) のようなものを実装する必要があるでしょう。

2) これらのラムダ式をシリアライズできたとしても、クライアントから送信されたサーバー上で任意のコードが実行される可能性が懸念されます。これは、クロスサイト スクリプティングよりもはるかに大きなセキュリティ上の問題を簡単に引き起こす可能性があります。クライアントが式をサーバーに送信して実行できるようにすることの潜在的な利点が、セキュリティの脆弱性の影響を上回るとは思えません。

于 2009-07-30T22:09:06.943 に答える
0

可能であれば、Reactive Framework で解決したい問題の 1 つは、発行とサブスクリプションを有効にして、Web サービスやその他のプルのみのサービスからキャッシュされたデータの通知を変更できるようにすることです。

于 2009-07-31T08:37:00.953 に答える
0

channel9 の新しいインタビューに基づいて、 .NET 4 の BCL でIObserver/のLINQ サポートがあるようです。IObservable

ただし、基本的には LINQ-to-Objects スタイルのクエリになるため、この段階では、「スマート サブスクライブ」のようには見えません。.NET 4 での基本的な実装はこれまでです (上記のインタビューからの私の理解によると)。

そうは言ってもIObserver、リアクティブ フレームワーク (Rx) には/のより詳細な実装がある場合があります。または、パラメーターIObservableに渡される独自の記述を作成し、の式ツリーを使用して、イベントに適したよりスマートな方法でサブスクライブできる場合があります。登録しているチャンネル。Expression<Func...>SubscribeFunc

于 2009-08-05T02:20:33.203 に答える