22
わわわわわわ わわわわわ #60 わわわわわわわ Silverlight わわわわ Prism わ Rx わわわわわわわわ わわ (@tanaka_733 )

110625 わんくまlt tanaka733_pub

  • Upload
    -

  • View
    944

  • Download
    2

Embed Size (px)

Citation preview

Page 1: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

業務アプリでの Silverlight 活用事例~ Prism と Rx を使ってみた~

田中 孝佳  (@tanaka_733)

Page 2: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

自己紹介

• (株)ワークスアプリケーションズ勤務– 国産 ERP パッケージベンダー– 研究部門所属

• クラスタ– 仕事: AWS, Java, Eclipse, Oracle

– 趣味 : Azure, Silverlight, Windows Phone 7

– その他:低温物理 , Scheme, Erlang

Page 3: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

どんな仕事?

研究部門のお仕事

• クラウドを使って面白いことをする• 社内のクラウド利用を促進させる• 雑誌に執筆したり ( まだ 1 本ですが ) など社外

活動

クラウド管理ツールの開発担当

• 誰でも気軽に安全にクラウドを使えるようにする

• 研究材料としてのチャレンジングな技術を入れる

Page 4: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

クラウド管理ツールで Silverlight 使いました!

RIA 技術を調査したい• Java の GUI には苦労しっぱなし・・・• Flash より業務アプリに向いている気がする

C#, Visual Studio, Silverlight 万歳! • 開発生産性高い• 機能開発に集中できる開発環境

ただし、サーバーサイドは Java です• 会社としての判断もありつつ• これはこれで研究としては面白いかも

Page 5: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

出てきた問題点

標準の UI 部品じゃ足りない• Grid 系のコンポーネントとか

MVVM のための部品がほしい

疎結合を維持したい• ViewModel と View をいつ結びつける?• ViewModel 間で疎結合なままイベント飛ばしたい

通信部分の非同期処理の記述が面倒

きっといいフレームワークがあるはず・・・

Page 6: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

フレームワークを導入しました

Pattern & Practices Prism• MVVM サポート、テストサポート• DI(MEF)  など

Rx(Reactive Extentions)• 非同期を LINQ 的に使いやすく!

Silverlight Toolkit• 標準の UI 部品の不足を補う

• DataGrid, BusyIndicator とか便利

Blend SDK• Expression Blend 使ってないけど SDK は必須

Page 7: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

アーキテクチャ図 ( クライアント側 )

Java(JAX-RS)

Page 8: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

サーバーサイドとの通信

• RESTful API(JSON over HTTPS) を採用• Silverlight 側は HttpWebRequest を利用

– HTTP 処理をクライアント側にする

• デフォルトのブラウザ側だとエラーコードやエラー時のレスポンスボディが取得できません

• 英語の方が詳しい資料あり〼http://msdn.microsoft.com/en-us/library/dd920295%28v=vs.95%29.aspx

Page 9: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

Prism とは

• MVVM サポート、 DI(MEF, Unity) など複数の機能をもった大きなフレームワーク– http://compositewpf.codeplex.com/

• ドキュメントも結構充実している– 英語だけど

• MVVM のサポートが充実– 今日の講師の方のブログなどでも勉強

• (個人的には)必要な部分だけ使えばいいと判断しました

Page 10: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

Prism の導入効果

MVVM サポート• ViewModel 用の基底クラス (NotificationObject)• DelegateCommand• ただ、不足しているところも感じるので自前で実装

DI 的なサポート• View と View 、 View と ViewModel• EventAggregator

テストサポート• ViewModel に対してテストを書けるには書ける ( け

ど・・・ )

Page 11: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

ViewModel のサンプル

コードテンプレートを定義しておくと便利

プロパティ変更イベントの発火

用意されている基底クラスを継承

Page 12: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

View

Page 13: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

ViewModel と EventAggregator

デザイン時に Bindingするために

引数なしコンストラクタが必要だった

DI的に IEventAgregatorを注入

Page 14: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

Rx の導入効果・・・の前に、それ以前の状態

Silverlight の通信は全て非同期

• 今のところ 150程度

取得した JSON文字列をC# のオブジェクトにマッピングする処理が入る

RESTful   API の数だけメソッドが必要

オレオレフレームワークで共通化しよう!

Page 15: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

いけてないコード その (1)

• Event 方式 (WebClient と同様 )• よく見かけるけどコーディングが面倒

Page 16: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

いけてないコード その (2)

• 取得した後の処理を Action<T> として渡す

• 失敗時もあるので、引数は 2 つ使いづらい

Page 17: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

Rx というものを知りました

• AWS SDK for WP7 というブログを書いたときに neuecc さんにコメントを頂きました

Page 18: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

Rx

• 非同期を LINQ 的に簡単に–参考にさせてもらった資料

• http://www.slideshare.net/neuecc/reactive-extensions-8049041

• C# 5.0 async CTP もあるけど CTP だし、5.0 のリリース時期も読めない・・・

• WP7 では最初から Rx がライブラリに入ってる

• Data Developer Center入りして開発プロジェクトとしても継続されそう

Page 19: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

Rx を採用しよう

• 通信部分の返り値は全て IOveservable<T>にする

• 呼び出し側はこんな感じ– メソッドチェーンかつラムダ式なのは好みで

Page 20: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

Rx を採用しよう

• 通信部分はこんな感じ

Page 21: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

まとめ

Silverlight はクライアントだけでも導入できる

• サーバーとクライアントに明確な API を作る

生産性を上げるためにはフレームワーク導入

• 大きいフレームワークなので必要な機能を使う• MVVM サポートしてくれるけど不足も感じる

Prism

• 非同期を簡単に扱える強力なフレームワーク• 非同期部分の返り値は IObservable<T>

Rx

Page 22: 110625 わんくまlt tanaka733_pub

わんくま同盟 東京勉強会 #60

おまけ ( という名の宣伝 )

• ブログ書いてます• ( 会社のブログ )

– http://dev.worksap.co.jp/Members/t_tanaka/– AWS, Java ネタがメイン。一部 Silverlight ネ

タ• ( 個人ブログ )

– http://tanaka733.blogspot.com/– Silverlight, Azure, WP7 ネタメイン