19-D-5 Silverlightを利用したビジネスアプリケーション作成のポイント

2,674 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,674
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
107
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

19-D-5 Silverlightを利用したビジネスアプリケーション作成のポイント

  1. 1. Silverlight を用いたビジネス アプリケーション作成のポイント 西崎 公太 19-D-5
  2. 2. <ul><li>Silverlight とビジネス アプリケーション </li></ul><ul><li>設計・開発のポイント </li></ul><ul><ul><li>アプリケーション アーキテクチャ </li></ul></ul><ul><ul><li>Composite Application Guidance </li></ul></ul><ul><ul><li>UI とロジックの結合方法 </li></ul></ul><ul><ul><li>非同期 </li></ul></ul>Agenda
  3. 3. <ul><li>Silverlight とビジネス アプリケーション </li></ul><ul><li>設計・開発のポイント </li></ul><ul><ul><li>アプリケーション アーキテクチャ </li></ul></ul><ul><ul><li>Composite Application Guidance </li></ul></ul><ul><ul><li>UI とロジックの結合方法 </li></ul></ul><ul><ul><li>非同期 </li></ul></ul>Agenda
  4. 4. Silverlight とビジネス アプリケーション <ul><li>Silverlight とは </li></ul><ul><ul><li>Web 上で動画やアニメーションを用いたリッチなメディア体験や、豊かな表現力を持ち、機能性や操作性に優れた Web アプリケーションを迅速に開発、配信するための、最も包括的で強力なアプリケーション開発フレームワーク </li></ul></ul>出典 : http://www.microsoft.com/japan/silverlight/
  5. 5. Silverlight とビジネス アプリケーション <ul><li>ポイント </li></ul><ul><ul><li>リッチなメディア体験、豊かな表現力 </li></ul></ul><ul><ul><li>機能性、操作性 </li></ul></ul><ul><ul><li>Web アプリケーション </li></ul></ul><ul><ul><li>迅速な開発、配信 </li></ul></ul><ul><ul><li>包括的、強力なフレームワーク </li></ul></ul>
  6. 6. Silverlight とビジネス アプリケーション <ul><li>ビジネス アプリケーション </li></ul><ul><ul><li>日常業務の効率化 </li></ul></ul><ul><ul><li>クライアントの展開、 処理のサーバ集中 </li></ul></ul><ul><ul><li>開発生産性、保守性 </li></ul></ul><ul><li>要件にマッチした場合には◎ </li></ul>豊かな表現力 操作性 Web 迅速な開発、配信 フレームワーク
  7. 7. <ul><li>Silverlight とビジネス アプリケーション </li></ul><ul><li>設計・開発のポイント </li></ul><ul><ul><li>アプリケーション アーキテクチャ </li></ul></ul><ul><ul><li>Composite Application Guidance </li></ul></ul><ul><ul><li>UI とロジックの結合方法 </li></ul></ul><ul><ul><li>非同期 </li></ul></ul>Agenda
  8. 8. アプリケーション アーキテクチャ <ul><li>ビジネス処理をどこで行うか </li></ul><ul><ul><li>クライアント、サーバ </li></ul></ul><ul><li>通信に何を用いるか </li></ul><ul><ul><li>WCF </li></ul></ul><ul><ul><ul><li>SOAP </li></ul></ul></ul><ul><ul><ul><li>REST </li></ul></ul></ul><ul><ul><li>HTTP </li></ul></ul>
  9. 9. アプリケーション アーキテクチャ <ul><li>選択したアーキテクチャ </li></ul><ul><ul><li>WCF との親和性が高い </li></ul></ul><ul><ul><li>( たまたま ) 対象アプリがサービス公開を行う </li></ul></ul>Client Application Database Silverlight アプリ Web サービス RDB WCF
  10. 10. <ul><li>Silverlight とビジネス アプリケーション </li></ul><ul><li>設計・開発のポイント </li></ul><ul><ul><li>アプリケーション アーキテクチャ </li></ul></ul><ul><ul><li>Composite Application Guidance </li></ul></ul><ul><ul><li>UI とロジックの結合方法 </li></ul></ul><ul><ul><li>非同期 </li></ul></ul>Agenda
  11. 11. Composite Application Guidance <ul><li>WPF および Silverlight 用の Framework </li></ul>参照 : http://www.codeplex.com/CompositeWPF/
  12. 12. Composite Application Guidance <ul><li>コンセプト </li></ul><ul><ul><li>UI Composition </li></ul></ul><ul><ul><ul><li>“ Region” を組み合わせて UI を構成する </li></ul></ul></ul><ul><ul><li>Modularity </li></ul></ul><ul><ul><ul><li>疎結合したモジュールを組み合わせてアプリケーションを構成する </li></ul></ul></ul><ul><ul><ul><li>イベントや DI などを使用して実現している </li></ul></ul></ul>
  13. 13. Composite Application Guidance ビュー XAP ファイル ( メイン ) XAP ファイル ( モジュール ) XAP ファイル ( モジュール ) サービス
  14. 14. Composite Application Guidance <ul><li>Event Publication/Subscription </li></ul><ul><ul><li>イベントの発信者と受信者の分離 </li></ul></ul><ul><ul><li>複数の発信者からのイベントを受信 </li></ul></ul><ul><ul><li>.NET Event </li></ul></ul><ul><ul><ul><li>発信者 </li></ul></ul></ul><ul><ul><ul><ul><li>this.TheEvent(this, eventArgs); </li></ul></ul></ul></ul><ul><ul><ul><li>受信者 </li></ul></ul></ul><ul><ul><ul><ul><li>Publisher. TheEvent += this.TheEventHandler; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>発信者への参照が必要 </li></ul></ul></ul></ul>
  15. 15. Composite Application Guidance <ul><li>Event Publication/Subscription </li></ul><ul><ul><li>イベントの発信者と受信者の分離 </li></ul></ul><ul><ul><li>複数の発信者からのイベントを受信 </li></ul></ul><ul><ul><li>CAL Event Publication/Subscription </li></ul></ul><ul><ul><ul><li>発信者 </li></ul></ul></ul><ul><ul><ul><ul><li>this.EventAggregator.GetEvent<TheEvent> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>.Publish(eventArgs); </li></ul></ul></ul></ul><ul><ul><ul><li>受信者 </li></ul></ul></ul><ul><ul><ul><ul><li>this.EventAggregator.GetEvent<TheEvent> </li></ul></ul></ul></ul><ul><ul><ul><ul><li>.Subscribe(this.TheEventHandler); </li></ul></ul></ul></ul>
  16. 16. Composite Application Guidance <ul><li>得られる効果 </li></ul><ul><ul><li>機能単位での開発 </li></ul></ul><ul><ul><ul><li>開発者が自分の担当機能に専念 </li></ul></ul></ul><ul><ul><li>カスタマイズ性の向上 </li></ul></ul><ul><ul><ul><li>リリース後にモジュールによる機能追加 </li></ul></ul></ul>
  17. 17. <ul><li>Silverlight とビジネス アプリケーション </li></ul><ul><li>設計・開発のポイント </li></ul><ul><ul><li>アプリケーション アーキテクチャ </li></ul></ul><ul><ul><li>Composite Application Guidance </li></ul></ul><ul><ul><li>UI とロジックの結合方法 </li></ul></ul><ul><ul><li>非同期 </li></ul></ul>Agenda
  18. 18. UI とロジックとの結合方法 <ul><li>MVVM(Model-View-ViewModel) パターン </li></ul><ul><ul><li>WPF に適用するパターンとして考案 </li></ul></ul><ul><ul><ul><li>同様のアーキテクチャを持つ Silverlight に自然に適用可能 </li></ul></ul></ul><ul><ul><li>UI(View) と振る舞い (ViewModel) との分離 </li></ul></ul>Model 通知 ( プロパティ、イベント ) バインド 操作 View ViewModel
  19. 19. UI とロジックとの結合方法 <ul><li>MVP(Model-View-Presenter) パターン </li></ul><ul><ul><li>WinForm 、 ASP.NET などで使用 </li></ul></ul><ul><ul><ul><li>CAG のサンプル実装で使用 </li></ul></ul></ul><ul><ul><li>UI(View) と振る舞い (Presenter) との分離 </li></ul></ul>Model 操作 ( インターフェイス経由 ) 移譲 操作 View Presenter
  20. 20. UI とロジックとの結合方法 <ul><li>得られる効果 </li></ul><ul><ul><li>再利用性の向上 </li></ul></ul><ul><ul><ul><li>ロジックの粒度を細かくし、再利用しやすくする </li></ul></ul></ul><ul><ul><li>UI と振る舞いとの分離 </li></ul></ul><ul><ul><ul><li>単体テストの容易性 </li></ul></ul></ul>
  21. 21. <ul><li>Silverlight とビジネス アプリケーション </li></ul><ul><li>設計・開発のポイント </li></ul><ul><ul><li>アプリケーション アーキテクチャ </li></ul></ul><ul><ul><li>Composite Application Guidance </li></ul></ul><ul><ul><li>UI とロジックの結合方法 </li></ul></ul><ul><ul><li>非同期 </li></ul></ul>Agenda
  22. 22. 非同期 <ul><li>Silverlight の Web アクセスはすべて非同期 </li></ul><ul><ul><li>UI スレッドを止めることはできない </li></ul></ul><ul><ul><li>別スレッドで実行される </li></ul></ul><ul><ul><ul><li>マルチスレッドプログラミングが必要 </li></ul></ul></ul><ul><li>処理中に操作ができてしまう </li></ul><ul><ul><li>ビジネスロジック実行中は、コントロールを無効化するなどの対処が必要 </li></ul></ul>
  23. 23. 非同期 <ul><li>マルチスレッドプログラミング </li></ul><ul><ul><li>必要であること自体は避けられない </li></ul></ul><ul><ul><li>よりとりつきやすい方法を採用する </li></ul></ul><ul><ul><ul><li>XXXAsync() ~イベント </li></ul></ul></ul><ul><ul><ul><li>BeginXXX() ~コールバック・ EndXXX() </li></ul></ul></ul><ul><ul><ul><li>BeginXXX() ~ wait ~ EndXXX() </li></ul></ul></ul>
  24. 24. 非同期 <ul><li>XXXAsync() ~イベント </li></ul><ul><ul><li>var service = new CalcClient(); </li></ul></ul><ul><ul><li>service.AddCompleted += </li></ul></ul><ul><ul><li>(sender, args) => { this.View.DispatchMain( () => TestModel.Result = args.Result); }; </li></ul></ul><ul><ul><li>service. AddAsync (TestModel.FirstOperand, TestModel.SecondOperand); </li></ul></ul>
  25. 25. 非同期 <ul><li>BeginXXX() ~コールバック・ EndXXX() </li></ul><ul><ul><li>var service = (Calc)new CalcClient(); </li></ul></ul><ul><ul><li>service. BeginAdd (TestModel.FirstOperand, TestModel.SecondOperand, </li></ul></ul><ul><ul><li>s => { this.View.DispatchMain(() => TestModel.Result = service. EndAdd (s)); } </li></ul></ul><ul><ul><li>, null); </li></ul></ul>
  26. 26. 非同期 <ul><li>BeginXXX() ~ wait ~ EndXXX() </li></ul><ul><ul><li>new Thread(() => </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><li>var service = (Calc)new CalcClient(); var handle = service. BeginAdd ( TestModel.FirstOperand, TestModel.SecondOperand, null, null); handle.AsyncWaitHandle. WaitOne (); this.View.DispatchMain(() => TestModel.Result = service. EndAdd (handle)); </li></ul></ul><ul><ul><li>}).Start(); </li></ul></ul>
  27. 27. 最後に <ul><li>Silverlight はビジネス アプリケーションに適した一面も持っている </li></ul><ul><li>用途に適したアーキテクチャの選定が重要 </li></ul><ul><ul><li>Composite Application Guidance も視野に入れて </li></ul></ul><ul><li>非同期処理、マルチスレッドプログラミングが不可欠 </li></ul>

×