読者です 読者をやめる 読者になる 読者になる

Livet & ReactiveProperty

WPF .NET

RtStorageというアプリケーションをつくりました。

このアプリが何するものなのかはさておき(笑)、開発するにあたって利用したLivetとReactivePropertyの感想を書いてみたいと思います。

Livet

まずはLivet。これはWPFMVVMパターンを適用したアプリケーションを開発するためのインフラストラクチャです。

これまでWPFのアプリケーションはいくつか作ったことがあったのですが、インフラなしで開発すると、自分でインフラ的なコードを書かなくちゃいけなくて面倒だったり、ViewModelがViewに依存することでテストコードが書きにくくなったりしてしまうんですよね。

今回はLivetを使って開発してみたのですが、インフラなしの場合と比べるとすごく楽に開発できました。LivetにはMVVMパターンで欲しい機能がきちんとそろっていると思います。
そしてRtStorageのソースコードを見てもらえば分かりますが、コードビハインドは一切書いておらず、ViewModelがViewに依存しているところもないと思います。Livetを使うとこういうコードがとても書きやすくなります。

Livetにはほとんど不満はないのですが、RoutedEventTriggerや、ディレクトリを選択するActionなんかはインフラに含まれてるといいかなと思いました。まぁ、FolderBrowserDialogはWinforms依存なので含めにくいと思いますし、自分で作ってもそれほど大変ではないのですが。

あとは使いたい機能があっても、使い方が分からなくて調査に時間がかかったりしたので、ドキュメントかサンプルコードが充実してくるとうれしいですね。

ReactiveProperty

ReactiveProperty - MVVM Extensions for Rx - Home

つぎはReactiveProperty。これはReactive Extensionsを使って、イベントや非同期処理とWPFのUIをシームレスに連携させるためのライブラリ(という認識でいいのかな?)です。

C# 5.0ではasync/await構文が取り入れられるとか、WinRTでは時間のかかる処理はすべて非同期になっているとか、今後は非同期処理がますます重要になってきそうです。ということもあり、RtStorageではCORBA通信(!)を使っているところやデータベースアクセスの箇所をなるべく非同期にしています。

ReactivePropertyは少しとっつきにくいのですが、CommandとPropertyを非同期でつなげるところがすっきり書けます。そして何よりコードを書いていて楽しい!

LivetのViewModelCommandとReactiveCommandをどのように使い分けるのかはまだ分からないのですが、CommandのCanExecuteの条件が複雑な場合は、ReactiveCommandを使ったほうが書きやすいなと感じています。宣言的に書けるってすばらしい。

その他

RtStorageは非同期に動作するように作っているのですが、コレクションの排他制御周りの挙動がどうも怪しい。ReactivePropertyはver.0.2.0で、Livetは次のver.0.99で、スレッドセーフなコレクションに対応するとのことなので、試してみたいところです。


開発者のお二人にコメントいただけるとか、うれしはずかしです><