基本的にはWindows環境で稼働するUIの手段は、いろいろあります。C/C++でGDIベースでがりがり書く手からHTMLとJavaScriptで動かす方法まで。Windows 8でMicrosoftがプッシュしているWinRTを使ったMetro-styleのアプリケーションはXAMLというUI構築手段とクラスライブラリの両面でWPFやSilverlightと共通性があります。HTML+JavaScriptにしても古くはActiveXベースのHTML Applicationまでさかのぼれると思います。
WPFやSilverlightのアプリはクラスライブラリを含めてWinRTのライブラリ群とはかなり共通性があり、Windows Phone 7のクラスライブラリとも整合性が取れるのでまとめた形でメインテナンスするのが現実的だと思います。Windows FormsはクラスライブラリがほぼGDIに一対一で対応しているのでWPFやSilverlightとは違いすぎるのが難点ですね。WebRequestなどのAPIもWIndows Formsならほぼ同期呼び出しだと思いますが、Silverlight等では非同期呼び出ししかサポートされていませんし。まあ、非同期呼び出しはBegin~Endパターンでかなり前の.NET Frameworkでも使えるので非同期で書いておくというのはいいと思います。
非同期呼び出しはそのまま手で書くと大体こんなパターンです。
- Begin~で処理開始、処理完了の移譲を渡す
- 処理完了時に呼び出されるメソッドでEnd~を叩いて終了情報を取得
ただ、そのまま書くとすごくめんどくさくなります。同期呼び出しだと状態遷移がそのままコードに流れとして現れますけど、非同期だと移譲をクロージャで書いていくとだんだんとネストが深くなっていってスパゲッティ化の兆候が表れます。
非同期系に関しては.NETではReactive Extensionsっていうベストプラクティスがあります。これに関してはneue ccさんのスライドが非常にいいのでembedしておきます。
こういった、今でも使えるベストプラクティスである程度、処理を括りだしていくとWindows 8でもカットアンドペーストを入れればかなりのコードを使いまわせると思います。逆に言うと、Windows Formsのコードが課題ですね。

コメントする