マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • Observer パターンを実装するフレームワークだが、
  • 特に、LINQ to EventsもしくはLINQ to Asynchronusと表現できる。
  • これは、要するに、
    • イベントや非同期処理をLINQっぽく扱える。
    • 非同期 / イベント / 時間に関する処理をLINQ的に簡潔かつ宣言的に記述できる。

と言うトコロを意味する。

経緯

  • Silverlight Toolkitに"System.Reactive.dll"が同梱される。
  • Reactive Framework ---> Reactive Extensionsと名称変更。
  • DevLabs?(昔のMSコミュニティサイト)でプロジェクト公開
    ソースコードは(恐らく)CodePlex?で公開されていた。
  • 何度もAPIの消滅・追加を繰り返す。
  • JavaScript版が登場
  • .NET Framework 4 SP1に標準搭載
  • さまざまな開発言語に移植され、幅広く使われている。
    • Java/Android用のRxJava?
    • JavaScript用のRxJS
    • Swift用のRxSwift?

ユースケース

Observer パターンの実装

LINQ(フィルタ、変換、集計、合成)

通知に対して、LINQ(フィルタ、変換、集計、合成)を適用できる。

イベントのLINQ

イベントにObserver パターンを適用して、
LINQ(フィルタ、変換、集計、合成)を適用できる。

非同期のLINQ

  • イベントにObserver パターンを適用して、
    LINQ(フィルタ、変換、集計、合成)を適用できる。
  • 具体的には、Observerを合成してネストを処理が可能。

詳細

Observer パターンで構成される。

  • 何らかのProvider(IObservable<T>など)で監視を行い、
  • Providerから状態のPush(=通知、発行、イベント)を、
  • Subscriber(IObserver<T>など)が受け取る。

Subscriber

IObserver<T>を実装したクラスを定義する。

Provider

  • IObservable<T> を実装したクラスを定義する。
  • クラスはラムダ式を使用したメソッドチェーンで実装できる。

開始

  • Createなどの生成メソッドで生成、
    #メソッド概要
    1Create監視内容を定義する。
    2Return渡した値を単純に通知する。
    3Range正指定した範囲の値を通知する。
    4Repeat第1引数で渡したデータを、
    第2引数で指定した回数繰り返して通知する。
    5Generatefor 文的に以下を定義する。
    ・初期値
    ・継続判定デリゲート
    ・インクリメント・デリゲート
    ・通知する値を生成するデリゲート
    6Case複数用意された IObservable の中から、どれか1つを選択。
    ・IObservable配列
    ・IObservable選択デリゲート
    7Throw例外を通知する。
    8Start渡した値を非同期で通知する。
    9DeferProviderのファクトリを実装。
  • Createで生成する場合、以下のメソッドを使用して監視内容を定義する。
    #メソッド概要
    1OnNext?新しい値が発生したことを通知する。
    2OnError?エラーが発生し、異常終了したことを通知する。
    3OnCompleted?正常に終了したことを通知する。
  • Subscribeで、上記の其々のメソッドからの
    Push(=通知、発行、イベント)を受け取るSubscriber?を設定する。

終了

  • ProviderがOnCompleted?を呼び出し、正常終了。
  • ProviderがOnError?を呼び出し、異常終了。
  • Subscriber?側でDisposeする。

分類

大きく分けて Hot / Cold に分類される。

  • Cold
    • Subscriber?とは1:1の関係
    • Subscriber?が居なければ動作しない。
    • 監視が終わった後はOnCompleted?で(自分で)終了する。
    • Observable.Intervalなど例外もある。
  • Hot
    • Subscriber?とは1:nの関係
    • Subscriber?がいなくても動作し続ける。
    • 監視が終わったかどうかSubscriber?が判断してDispose。

Subject (Subscriber/Provider)

  • IObserver<T>とIObservable<T>を実装したクラスを定義できる。
  • Subjectを使用すれば、Subscriberをラムダ式で定義できる。

その他

合成

Providerの合成

  • Merge
  • SelectMany?
  • Switch

値の合成

  • Concat
  • Zip
  • Amb
  • CombineLatest?

変換

イベント

  • FromEvent? メソッドで、イベント・クラスを IObservable に変換できる。
  • LINQメソッドを使用し通知内容を操作できる。
    • 具体的には、ドラッグ操作を簡単に記述できる。

非同期

  • FromAsyncPattern?メソッドでBeginInvoke?/EndInvoke? を IObservable に変換できる。
  • LINQメソッドを使用し通知内容を操作できる。
    • 具体的には、SelectMany? を組み合わせ、非同期のネストを簡単に記述できる。

ポイント

HotとColdの概念を掴む

Schedulerが実行スレッドを決定する

Subjectでテストする

参考

@IT

Build Insider

Qiita

neue cc

xin9le.net

かずきのBlog@hatena

present

Muhammad Rehan Saeed


Tags: :.NET開発


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-03 (水) 09:52:03 (257d)