.NET 4.0 beta 2は、introducedIObservableとIObserverのインターフェイスを持ちます。古典的なイベントよりも.NET Rxの利点?
クラシック.NETイベントと比較してどのような利点がありますか?これは同じ問題を解決しないのですか?
.NET 4.0 beta 2は、introducedIObservableとIObserverのインターフェイスを持ちます。古典的なイベントよりも.NET Rxの利点?
クラシック.NETイベントと比較してどのような利点がありますか?これは同じ問題を解決しないのですか?
IObservableをイベントとして使用して、イベントをタイプIObservableのプロパティで公開するコードを置き換えることができますが、それは実際のポイントではありません。
IObservableについて理解するには、2つの重要な事柄があります:非同期(一般的に単一の値を返す)の操作やイベント:
は、それは我々が前に統一する方法を知りませんでした二つの概念を統合(通常は永遠に続く)。
です。 CLRイベント、IAsyncResult、またはINotifyCollectionChangedとは異なり、一般的なイベントや非同期操作から特定のイベントを構築できます。
ここは、今日の午後ちょうど仕事で遭遇した例です。
Silverlightには、通常のコントロールに適用できない画像コントロールに適用できるいくつかの効果があります。コントロールのコンテンツが変更されたときにこれらの制限を回避するために、私は視覚的外観が更新されるのを待って、スクリーンショットを撮ります。次に、その視覚的表現を隠してスナップショットと置き換え、視覚効果をイメージに適用したいと思います。今では、イメージエフェクトをコントロールに適用できます(インタラクティブではないと仮定して)。
このプログラムは簡単ですが、非同期である必要があります。私は、画像にエフェクトを適用することができます前に、私が完了するまでに2つの連続で非同期操作を待たなければなりません:
コントロールの内容が変更されたは、どのように私は思います更新され
Rxでプログラミングしているときは、「私のフレームワークが提供するイベントは何ですか?」と考えることです。それを作成して行く。私たちはイベントをシンプルな入力駆動型のもの( "mouseover"、 "mouseclick"、 "keyup"など)と考えるように訓練されています。しかし、あなたのアプリにとって非常に複雑で特定なイベント(「GoogleMsdnMashupStockDataArrived」、「DragStarting」、および「ImageContentChanged」)の理由はありません。このようにプログラムを構成すると(状態を変更してとそれに応答するが必要なイベントを正確に作成すると)、状態のバグが少なく、順序が整っていて、全体的に自己記述的です。
これは取得できましたか?スコットを:-)
イベントベースのプログラミングモデルの拡張です。あなたはIObserverを実装するものを作成します。基本的には、「ここでは、コレクション内の何かが変わったときに何をしたいのですか」と言っています。そういう意味では、私たちがイベントで何をしてきたのかを標準化したものに過ぎません。
彼らはIEnumerableパターンと比べて大きな正面らしいようにそれを押しています。 IEnumerableは「プル」ですが、IObservableは「プッシュ」です。
私がストレートイベントで見る唯一の利点は、標準化されたインターフェイスだということです。私はここでObservableCollection(とINotifyCollectionChanged)と大きな重なりが見えます。多分、彼らは.NETでPERLのモットーを採用しようとしています。「それを行う方法は複数あります。
添付チャレンジを完了する質問はIObservableとIObserverは、フレームワークのバージョン1で実装された場合、フレームワークがどのようになるか、それからです。 エラー処理とイベントプログラミングが可能でした。 非同期イベントと同期イベントを処理する一般的な方法。 パラレル拡張はIObservable型を使用していました。 しかし、主なことは、これが最初から構成可能であったため、現在不可能ではないにしても困難な多くの項目を大幅に簡素化するということです。 (ユニットテスト非同期UIは私の頭の上から気になるものです) – DouglasH
@Doughlasしかし、私たちは歴史を書き換えることができないので、質問は "theOldWay or Rx"ではなく "theOldWay OR(theOldWay and Rx ) " –
IObservableの主な利点は、その構成可能性です。 IObservable
私は利点のわからないんだけど、私は次の古典的な.NETのイベントとの違いを参照してください。このために別のイベントを必要とする
エラー通知
クラシックイベントを、またはEventArgs
チェックする必要があるError
プロパティを持つクラス。
終了の通知通知
クラシックのイベントがチェックする必要がありFinal
プロパティを使用して、このまたはEventArgs
クラスの別のイベントを必要とします。
あなたは間違いなくRx Workshop: Observables versus Eventsビデオを見なければならないと
greateの例(したがって+1)しかし、私はむしろすべてのプログラマーがRxを理解するまでには長い時間がかかるので、私はむしろ状態マシンを見ると思います。 Rxが一歩遠すぎると、ポストプログラマーはComp Sciの学位を持っていないと決めたことはできません。 –