RxFlowについて
RxFlowとは?
RxFlowはRx( Reactive Extensions )を用いてフロー制御を行うためのライブラリです。
現在の業務でネットワークアクセスを含む分岐点の多いバッチ処理を書いていて面倒になって作りました。
もともとはライブラリと言えるくらい大きくなる予定だったんですが、整理されていくうちにだんだんライブラリとして独立させる意味あるのか?ってサイズになってきました。でも今後拡充・・のつもりでライブラリとして公開しておきます。
なぜ Reactive Extension を使いたいのか?
ネットワークアクセスを含むリトライをこんなにシンプルに書ける環境他にあります?
IObservable<string> GetApiResultText(Func<WebRequest> webRequestFactory) { return Observable.Defer(() => webRequestFactory().DownloadStringAsObservable()) .Retry(3, TimeSpan.FromSeconds(3)); }
このメソッドはリクエストを生成するファクトリを放り込むと非同期でネットワークアクセスを行い、結果を文字列として取得し、エラーの際は3秒おきに計3回までリトライするものです。
意図即コード、僕にとってはこれがRxの一番の魅力です。
昔OptionとEitherを定義してC#で勝手if文無しバッチを書いた時もやっぱりRxの柔軟な機能が欲しくなってRxに寄せるはめになったんですよね。
また継承の多態を駆使したコードと組み合わせるとメソッドチェインによるフローの一覧性ってものすごく強力です。
そしたらもうこれはRxです、Rx。というわけでRxです。