Silverlight2で業務アプリを作るには??

Posted 2008/10/7 6:14 by Tatsuya Yamada

先日RC0がリリースされたSilverlight2。

今週の金曜日には待望のMIX essentials. Silverlight Day も控えており、ますますヒートアップしてきてきました。わくわくですねGeeked

そんな中で最近はいろいろなお客さまからSilverlightへの期待を耳にすることが多いのですが、いつも話題になるのは、

 「実際の業務アプリの開発の中でSilverlightはどこまで使えるの?」

という疑問であったり、

「Silverlightになってデータのやり取りはどういう風になるの?」

という質問だったりします。

 

今回は、そんな疑問に対する回答として、インフラジスティックスのエバンジェリストであるトニー(Anthony Lombardo)が書いた記事をご紹介します。

Siverlight2でLine-of-Business(LOB = 業務アプリケーション)を作る」というもので、以下のサイトで公開されています。

Building Line-of-Business Apps with Silverlight 2


業務アプリの開発に欠かせないコアな機能を、Silverlight2 上ではどのように実現すべきなのかという、いくつかのヒントがありますので、ここではその要点をかいつまんでみたいと思います。

 

■ 認証(Authentication)

  • ASP.NETの認証モデルを利用し、Windows認証やForm認証を行うのが最も簡単な方法。
  • でもフルスクリーンのSilverlightアプリの中でよりハイレベルなログインのためのUXを実現するためには、WCFを使って要件にマッチしたものを作りたい。
  • ASP.NET3.5には認証やロール、プロファイルについてのWCFサービスが含まれているので、これらのサービスを導入のは簡単!
  • 単純なWCFサービスを作成してこれを認証用サービスのEndPointとし、さらにweb.config上でこのサービスを有効化するように構成すればよい(記事内のリスト1およびリスト2のコードを参照)
  • あとはSilverlightアプリ上でこのサービスを参照し、コーディングを行うだけ。

■ 個人設定とストレージ(Application Settings and Storage)

  • 個人設定の保持については、ASP.NETのプロファイル サービスをそのまま使用し、サーバー サイドでの管理が可能(記事のリスト3)。
  • ただ、シナリオによっては、クライアント側にプロファイルを保持したい場合もあるかと。そんなときは、分離ストレージ(Isolated Storage)を使うことができる。
  • 分離ストレージ自体は以前から.Net Frameworkに含まれていた機能なので、リスト4(記事内)のようなコードにもお馴染みだと思う。
  • でもSilverlightではIsolated Storageによるキャッシュ領域の最大サイズが100KBに制限されている点に注意!(拡張も可能だけどユーザが承認する必要がある)

■ データアクセス(Data Access)

  •  コントロールとのデータバインドについては、(当然ながら)XAMLベースのWPFのシナリオに非常に近い。ASP.NETに慣れている人にも、テンプレートを使った宣言的バインディングの方法を想像すればよいかと。
  • TextBox、checkBoxなどのコントロールでデータバインドを行うときは、リスト5のようにバインドしたいプロパティに対してDataContextの対象となるプロパティ名を記述する形が一般的。DataContextはすべてのコントロールが上位のコンテナから引き渡される。
  • DataGridをバインドするときは、ListSourceプロパティが従来のDataSourceプロパティの役目を果たす。
  • データの取得については、LinqToSqlをホストするWCFと通信するのが一般的なシナリオ。そのときにはDataContextのSerializationModeプロパティをUnidirectionalに指定するのがポイント(日本語 VisualStudio では、シリアル化モードを「一方向」と設定)。
  • 既にビジネス エンティティ クラスを独自に作成している場合は、双方向のデータバインドを実現するために INotifyPropertyChanged インターフェースを実装し忘れないように。

■ Silverlightでの双方向サービスについて (A Note on Silverlight's DuplexService)

  • サーバ側からのデータプッシュを可能にする双方向サービスという考え方は非常に魅力的だが、 あくまでHTTPコネクションの上で構築されているため、サーバ側から接続をはじめることはできない。
  • Silverlightでは、クライアント側からのHTTPコネクション上での一定時間のポーリングを行う形で、サーバサイドからのプッシュに似た機能を実現している。
  • ただ、現段階では双方向サービスは評価専用の別ライブラリ(System.ServiceMode.PollingDuplex.dll)で提供されていることもあり、まだ十分に使える段階とはいえない。実際のプロジェクトで採用するにはもう少し待った方が良いと思われる。

■ Model - View - ViewModel パターン (MVVM)

  • WPFでも多く使われているMVVMパターンは、当然Silverlightでも有効。デザイン(View)と画面ごとのロジック(ViewModel)の分離はWPF/SilverlightのXAMLモデルと相性が良い。
  • しかしSilverlightではWPFにおけるコマンド(Command)が存在しない点注意が必要。コマンドはMVVMの重要な要素なので、これに代わる部分をカスタムコーディングする必要がある。でもこの点はご安心を。Nikhil Kothari's blogでソリューションが紹介されている。


こんな感じです。最後にトニーはLOBの将来について、LOB2.0ともいうべきこれからの時代では、アニメーションやビデオといった外見だけではないSilverlightの真価が発揮されるでしょうと言及しています。

 この中でも双方向サービスやMVVMについての考察はとても興味深いところ。このへんを今後もうちょっと掘り下げてみたいと思います。

 

の全ての投稿を閲覧する