19-d-5 silverlightを利用したビジネスアプリケーション作成のポイント
TRANSCRIPT
Developers Summit 2010
西崎 公太西崎 公太19-D-5
SilverlightSilverlight を用いたビジネを用いたビジネス アプリケーション作成のポス アプリケーション作成のポイントイント
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーションとビジネス アプリケーション 設計・開発のポイント設計・開発のポイント
アプリケーション アーキテクチャアプリケーション アーキテクチャ Composite Application GuidanceComposite Application Guidance UIUI とロジックの結合方法とロジックの結合方法 非同期非同期
AgendaAgenda
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーションとビジネス アプリケーション 設計・開発のポイント設計・開発のポイント
アプリケーション アーキテクチャアプリケーション アーキテクチャ Composite Application GuidanceComposite Application Guidance UIUI とロジックの結合方法とロジックの結合方法 非同期非同期
AgendaAgenda
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーとビジネス アプリケーションション
SilverlightSilverlight とはとはWeb Web 上で動画やアニメーションを用いた上で動画やアニメーションを用いたリッチなメディア体験や、豊かな表現力を持リッチなメディア体験や、豊かな表現力を持ち、機能性や操作性に優れた ち、機能性や操作性に優れた Web Web アプリアプリケーションを迅速に開発、配信するための、ケーションを迅速に開発、配信するための、最も包括的で強力なアプリケーション開発フ最も包括的で強力なアプリケーション開発フレームワークレームワーク
出典 : http://www.microsoft.com/japan/silverlight/
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーとビジネス アプリケーションション
ポイントポイント リッチなメディア体験、豊かな表現力リッチなメディア体験、豊かな表現力 機能性、操作性機能性、操作性 Web Web アプリケーションアプリケーション 迅速な開発、配信迅速な開発、配信 包括的、強力なフレームワーク包括的、強力なフレームワーク
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーとビジネス アプリケーションション
ビジネス アプリケーションビジネス アプリケーション 日常業務の効率化日常業務の効率化 クライアントの展開、クライアントの展開、
処理のサーバ集中処理のサーバ集中 開発生産性、保守性開発生産性、保守性
要件にマッチした場合には◎要件にマッチした場合には◎
豊かな表現力
操作性
Web
迅速な開発、配信
フレームワーク
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーションとビジネス アプリケーション 設計・開発のポイント設計・開発のポイント
アプリケーション アーキテクチャアプリケーション アーキテクチャ Composite Application GuidanceComposite Application Guidance UIUI とロジックの結合方法とロジックの結合方法 非同期非同期
AgendaAgenda
Developers Summit 2010
アプリケーション アーキテクチアプリケーション アーキテクチャャ
ビジネス処理をどこで行うかビジネス処理をどこで行うか クライアント、サーバクライアント、サーバ
通信に何を用いるか通信に何を用いるか WCFWCF
SOAPSOAP RESTREST
HTTPHTTP
Developers Summit 2010
アプリケーション アーキテクアプリケーション アーキテクチャチャ
選択したアーキテクチャ選択したアーキテクチャ WCFWCF との親和性が高いとの親和性が高い (( たまたまたまたま )) 対象アプリがサービス公開を行う対象アプリがサービス公開を行う
Client Application DatabaseSilverlightアプリ
Web サービス RDBWCF
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーションとビジネス アプリケーション 設計・開発のポイント設計・開発のポイント
アプリケーション アーキテクチャアプリケーション アーキテクチャ Composite Application GuidanceComposite Application Guidance UIUI とロジックの結合方法とロジックの結合方法 非同期非同期
AgendaAgenda
Developers Summit 2010
Composite Application Composite Application GuidanceGuidance
WPFWPF およびおよび SilverlightSilverlight 用の用の FrameworkFramework
参照 : http://www.codeplex.com/CompositeWPF/
Developers Summit 2010
Composite Application Composite Application GuidanceGuidance
コンセプトコンセプト UI CompositionUI Composition
““Region”Region” を組み合わせてを組み合わせて UIUI を構成するを構成する ModularityModularity
疎結合したモジュールを組み合わせてアプリケ疎結合したモジュールを組み合わせてアプリケーションを構成するーションを構成する
イベントやイベントや DIDI などを使用して実現しているなどを使用して実現している
Developers Summit 2010
Composite Application Composite Application GuidanceGuidance
ビュー
XAP ファイル( メイン )
XAP ファイル( モジュール )
XAP ファイル( モジュール )
サービス
Developers Summit 2010
Composite Application Composite Application GuidanceGuidance
Event Publication/SubscriptionEvent Publication/Subscription イベントの発信者と受信者の分離イベントの発信者と受信者の分離 複数の発信者からのイベントを受信複数の発信者からのイベントを受信
.NET Event発信者
this.TheEvent(this, eventArgs);受信者
Publisher.TheEvent += this.TheEventHandler;発信者への参照が必要
Developers Summit 2010
Composite Application Composite Application GuidanceGuidance
Event Publication/SubscriptionEvent Publication/Subscription イベントの発信者と受信者の分離イベントの発信者と受信者の分離 複数の発信者からのイベントを受信複数の発信者からのイベントを受信
CAL Event Publication/Subscription発信者
this.EventAggregator.GetEvent<TheEvent>.Publish(eventArgs);
受信者this.EventAggregator.GetEvent<TheEvent>
.Subscribe(this.TheEventHandler);
Developers Summit 2010
Composite Application Composite Application GuidanceGuidance
得られる効果得られる効果 機能単位での開発機能単位での開発
開発者が自分の担当機能に専念開発者が自分の担当機能に専念 カスタマイズ性の向上カスタマイズ性の向上
リリース後にモジュールによる機能追加リリース後にモジュールによる機能追加
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーションとビジネス アプリケーション 設計・開発のポイント設計・開発のポイント
アプリケーション アーキテクチャアプリケーション アーキテクチャ Composite Application GuidanceComposite Application Guidance UIUI とロジックの結合方法とロジックの結合方法 非同期非同期
AgendaAgenda
Developers Summit 2010
UIUI とロジックとの結合方法とロジックとの結合方法
View ViewModel Model
MVVM(Model-View-ViewModel)MVVM(Model-View-ViewModel) パターンパターン WPFWPF に適用するパターンとして考案に適用するパターンとして考案
同様のアーキテクチャを持つ同様のアーキテクチャを持つ SilverlightSilverlight に自然に適用に自然に適用可能可能
UI(View)UI(View) と振る舞いと振る舞い (ViewModel)(ViewModel) との分離との分離
通知( プロパティ、イベント )
バインド操作
Developers Summit 2010
UIUI とロジックとの結合方法とロジックとの結合方法
View Presenter Model
MVP(Model-View-Presenter)MVP(Model-View-Presenter) パターンパターン WinFormWinForm 、、 ASP.NETASP.NET などで使用などで使用
CAGCAG のサンプル実装で使用のサンプル実装で使用 UI(View)UI(View) と振る舞いと振る舞い (Presenter)(Presenter) との分離との分離
操作( インターフェイス経由 )
移譲操作
Developers Summit 2010
UIUI とロジックとの結合方法とロジックとの結合方法
得られる効果得られる効果 再利用性の向上再利用性の向上
ロジックの粒度を細かくし、再利用しやすくすロジックの粒度を細かくし、再利用しやすくするる
UIUI と振る舞いとの分離と振る舞いとの分離 単体テストの容易性単体テストの容易性
Developers Summit 2010
SilverlightSilverlight とビジネス アプリケーションとビジネス アプリケーション 設計・開発のポイント設計・開発のポイント
アプリケーション アーキテクチャアプリケーション アーキテクチャ Composite Application GuidanceComposite Application Guidance UIUI とロジックの結合方法とロジックの結合方法 非同期非同期
AgendaAgenda
Developers Summit 2010
非同期非同期
SilverlightSilverlight のの WebWeb アクセスはすべて非同期アクセスはすべて非同期 UIUI スレッドを止めることはできないスレッドを止めることはできない 別スレッドで実行される別スレッドで実行される
マルチスレッドプログラミングが必要マルチスレッドプログラミングが必要
処理中に操作ができてしまう処理中に操作ができてしまう ビジネスロジック実行中は、コントロールを無ビジネスロジック実行中は、コントロールを無
効化するなどの対処が必要効化するなどの対処が必要
Developers Summit 2010
非同期非同期
マルチスレッドプログラミングマルチスレッドプログラミング 必要であること自体は避けられない必要であること自体は避けられない よりとりつきやすい方法を採用するよりとりつきやすい方法を採用する
XXXAsync()XXXAsync() ~イベント~イベント BeginXXX()BeginXXX() ~コールバック・~コールバック・ EndXXX()EndXXX() BeginXXX()BeginXXX() ~~ waitwait ~~ EndXXX()EndXXX()
Developers Summit 2010
非同期非同期
XXXAsync()XXXAsync() ~イベント~イベントvar service = new CalcClient();var service = new CalcClient();service.AddCompleted +=service.AddCompleted +=(sender, args) =>(sender, args) =>{{this.View.DispatchMain(this.View.DispatchMain(() => TestModel.Result = args.Result);() => TestModel.Result = args.Result);};};service.service.AddAsyncAddAsync(TestModel.FirstOperand,(TestModel.FirstOperand,TestModel.SecondOperand);TestModel.SecondOperand);
Developers Summit 2010
非同期非同期
BeginXXX()BeginXXX() ~コールバック・~コールバック・ EndXXX()EndXXX()var service = (Calc)new CalcClient();var service = (Calc)new CalcClient();service.service.BeginAddBeginAdd(TestModel.FirstOperand, (TestModel.FirstOperand, TestModel.SecondOperand,TestModel.SecondOperand,
s =>s =>{{this.View.DispatchMain(() =>this.View.DispatchMain(() =>TestModel.Result = service.TestModel.Result = service.EndAddEndAdd(s));(s));}}
, null);, null);
Developers Summit 2010
非同期非同期
BeginXXX()BeginXXX() ~~ waitwait ~~ EndXXX()EndXXX()new Thread(() =>new Thread(() =>{{
var service = (Calc)new CalcClient();var service = (Calc)new CalcClient();var handle = service.var handle = service.BeginAddBeginAdd((TestModel.FirstOperand, TestModel.FirstOperand, TestModel.SecondOperand, null, null);TestModel.SecondOperand, null, null);handle.AsyncWaitHandle.handle.AsyncWaitHandle.WaitOneWaitOne();();this.View.DispatchMain(() =>this.View.DispatchMain(() =>TestModel.Result = service.TestModel.Result = service.EndAddEndAdd(handle));(handle));}).Start();}).Start();
Developers Summit 2010
最後に最後に
SilverlightSilverlight はビジネス アプリケーションはビジネス アプリケーションに適した一面も持っているに適した一面も持っている
用途に適したアーキテクチャの選定が重用途に適したアーキテクチャの選定が重要要 Composite ApplicationComposite Application GuidanceGuidance も視野に入も視野に入
れてれて 非同期処理、マルチスレッドプログラミ非同期処理、マルチスレッドプログラミ
ングが不可欠ングが不可欠