karino2


南よ! 海の見える方!


Previous Entry Add to Memories Share
Rxその後
karino2
ちょこちょこ分からない所があったので元のソースを読んでみたら結構酷い。
コアの部分が自動生成で作られてて非常に読みにくい。しかも無駄な間接が多い。
C#って誰が書いてもそんな酷いソースにはならないので、こういう気分になったのは初めてだなぁ、と逆に驚く。
酷いコード耐性は、歴戦のふるつわものなので割と高いから、この位へっちゃらではあるが。

そんな訳でソースは読みにくいのだが、慣れてくるとだいたいクエリ式だけで自分の望む抽象化は組み立てられるので、あまりソースを読みたいと思う事もなくなった。
自分の望むObservableを返す関数をなんとなくクエリ式で実装する。
メンバに何か持たせたい時でもそんな述語のクラス作って、レキシカルクロージャをクエリ式で生成する感じで問題無し。この束縛されるオブジェクトがまた凄いいい感じのPOJOになるんだよねぇ。
INotifyを適当に待つObservableとか作って、そこに条件をクエリ式やWhereで足していくのは、哲学的な凄みを感じる。
MVVMとの相性もばっちり。
というかasyncとawait要らない気がするんだが、、、

UnitTest回りのモックの手厚いサポートは今や当然ではあるが、やはりいいね。
こういう、これまでテストが書きづらかった所が割と簡単にテスト書けるようになるのは、人類の勝利を感じる。

問題をObservableとして公開する所と、その上のLINQ式に分ける、ってのは2010年代のスタイルだなぁ、と思う。これまでのGUIプログラムでは無かった抽象化方法で、やってて凄い新鮮。しかもいろんな問題が凄い綺麗に片付く。すげー。
eventがFromEventPatternで簡単につながるのが良いね。

これのおかげで
DataBind<ー>INotify<ー>Observable
と全ての要素が接続される。
ViewModelを作る時にはどうせICommandとINotifyは(ほぼ)必須なのだから、そこにObservable の口が外から簡単に付けられるというのは、便乗のタダ乗りみたいなもんだ。
もちろんViewModelにつけても良い。

その上でのクエリ式の所は本当に柔軟なので、要求の変化にも簡単に対応出来る。

やりたい事を意味の領域で記述する。
データ抽象というのの一歩上だな。
操作抽象と言うか計算抽象というか。
その抽象の語彙を構築する事が新しいObservableを提供する事に対応し、これ自体もクエリ式で作れる。
つまりDSL自身が抽象化の仕組みを持ってるって事だな。

LINQはC#と適度に見た目が違うのが良い。
最初見た時はその無理やりくっつけた感が好きになれなかったが、こうやってSQLから離れてガンガン使われだすと、世界が適度に切り離されているのはむしろ読みやすく書きやすい。

という事でRxは大分自由に使えるようになった。
今後WPF アプリは全部これでいこう、と思うくらいには気に入ったよ。
AndroidもReactiveExtensionで行くかはまだ未定だが。

なんか凄いプログラムが好きになるテクノロジだなぁ。

You are viewing karino2