Upload
tatsuji-kuroyanagi
View
445
Download
12
Embed Size (px)
DESCRIPTION
Xamarin で Prism を使いたい! ~「正式対応」 まで待てない人のための Prism 利用 Tips~ 2014/10/22(土) JXUGC #2 東日本編 @matatabi-ux
Citation preview
Xamarin で Prism を使いたい!
2014/11/22(土) JXUGC #2 東日本編
@matatabi-ux
「正式対応」 まで待てない人のための Prism 利用 Tips
い い ネ コ の 日
自己紹介: 黒柳 達士(@matatabi-ux)
• お仕事
⁃ 某第二工場で Windows ストアアプリ大量生産中
⁃ 拝承系 SIer → 安心簡単快適デザイン会社 → 現職
• 個人活動
⁃ Blog: 「しっぽを追いかけて」 http://matatabi-ux.hateblo.jp
⁃ facebook: https://www.facebook.com/tatsuj.kuroyanagi
⁃ 日本人間工学会 認定人間工学専門家
あの!ザッカーバーグと同じ心理学専攻でした
⁃ 飼い猫写真も垂れ流し中
twitter: https://twitter.com/burst_cafemocha
facebook: https://www.facebook.com/burst.cafemochaしっぽもふもふの自宅警備ネコ 「モカ」
今回の目標とおことわり
• 目標
⁃ XAML プラットフォーム向け実装ライブラリである Prism(Windows ランタイム版)のご紹介
⁃ Xamarin でも Prism を使ってみたい!と思ってもらう(MvvmCross だけじゃないよ!)
• 注意事項
⁃ Xamarin は現在進行形で進化中なので仕様が大きく変わるかも
⁃ XAML をある程度知っている C# エンジニア視点でまとめました
⁃ しばらくしたら Prism の中の人がもっと洗練されたライブラリを見せてくれるはず
いちエンジニアの悪あがきとしてあまり期待せずにお聞きください・・・
⁃ Xamarin.iOS しか持ってません・・・Android 勢の皆さんごめんなさい;
おしながき
• Prism for Windows Runtime の概要
• Prism の Xamarin 対応状況
• Prism 風 Xamarin MVVM パターン
• Prism 風 Xamarin 画面遷移制御
• まとめ
Prism にはもっともっと機能はありますが今回はこのあたりに絞ってます!
※ この発表資料は SlideShare で公開します
http://www.slideshare.net/tatsujkuroyanagi/xamarin-prism
Prism for Windows Runtime の概要
Windows ランタイム*1 向けビジネスクライアントアプリ開発用ライブラリ
⁃ Microsoft patterns & practices チームが進めているプロジェクト成果物のひとつ
⁃ 設計や実装が容易で拡張性に優れた柔軟なアプリを作るための開発ライブラリと実践パターンを提供
⁃ ビジネスアプリ以外にも有効な機能やガイドがたくさん
⁃ WPF や Silverlight など他の XAML プラットフォーム向けの Prism もある
*1:Windows ストアアプリや Windows Phone 8.1 などの実行基盤
今後は Windows 系プラットフォームの主流になるはず?
View
ViewModel
Model
Bootstrap
NavigationEvent
Aggregator
App Lifecycle
Management
XAML 向けなので Native UI よりXamarin.Forms 利用の方がラク!
アプリ起動処理
Prism for Windows Runtime の概要
View 基底クラス
ViewModel Locator
Views
ViewModel 基底クラス
ViewModels
Delegate Command
ModelsValidation 基底クラス
データリポジトリ サービスプロキシ
データアクセス層
アプリケーション抽象クラス
アプリケーション
画面遷移制御 ライフサイクル管理
疎結合コンポーネント間通信
DI コンテナ(オプション)
Prism の提供機能
要実装機能
凡例
ビュー層 ビューモデル層 モデル層
インフラストラクチャ
Unity ライブラリが利用可能
アプリ起動処理 インフラストラクチャ
Prism for Windows Runtime の概要
View 基底クラス
ViewModel Locator
Views
ViewModel 基底クラス
ViewModels
Delegate Command
ModelsValidation 基底クラス
データリポジトリ サービスプロキシ
ビュー層 ビューモデル層 モデル層
データアクセス層
アプリケーション抽象クラス
アプリケーション
画面遷移制御 ライフサイクル管理
DI コンテナ(オプション)
Unity ライブラリが利用可能
Prism の提供機能
要実装機能
凡例
疎結合コンポーネント間通信
お時間の都合で・・・
今回のご紹介範囲は
これだけ ><
Prism の Xamarin 対応状況
Prism for Windows Runtime のリリースパッケージ
Prism MVVM Prism PubSubEvents Prism StoreApps
提供機能Model-View-ViewModel
パターン構築基盤
疎結合コンポーネント
間通信
アプリケーション
インフラスクトラクチャ
ライセンス Apache 2.0 Apache 2.0 Apache 2.0
Xamarin 対応ほぼそのまま利用可能
PCL 提供あり
そのまま利用可能
PCL 提供あり
利用不可・実装参考程度?
Windows ランタイム依存
URL https://pnpmvvm.codeplex.com/ https://pnppubsub.codeplex.com/ https://prismwindowsruntime.codeplex.com/
備考各層基底クラスや Command
ViewModel Locator など
Event Aggregator
イベント集約・発信
画面遷移制御
ライフサイクル管理 など
2014/11/14 現在の状況
Prism 風 Xamarin MVVM パターン
Prism MVVM パッケージのソリューション構成
ソースコードのダウンロード先
https://pnpmvvm.codeplex.com/SourceControl/latest#
ソースコードはこちらからダウンロード可能!
View からの命令・操作をクラス化する Command パターン実装基盤
₋ DelegateCommand :非同期処理を仲介できるコマンドクラス
₋ CompositeCommand :複数のコマンドを集約するコマンドクラス
View にデータ変更を通知する実装基盤
₋ BindableBase :プロパティ値の変更を通知するバインド可能な基底クラス
₋ ErrorContner :入力値の検証結果をもつ基底クラス
₋ PropertySupport :プロパティを名称の文字列に置換するユーティリティクラス
Prism 風 Xamarin MVVM パターン
ViewModel を View にバインドする実装基盤
₋ IView :DataContext プロパティをもつ View インタフェース
₋ ViewModelLocatorProvider :ViewModel を生成・保持するための管理クラス
₋ ViewModelLocator :View に ViewModel を自動バインドするクラス
View と ViewModel の関連付けには MvvmCross のように
暗黙的規則も明示的規則も指定できます
View に依存するので Xamarin 対応モジュールはまだ提供されてません;
Prism MVVM パッケージのソリューション構成
Prism 風 Xamarin MVVM パターン
Xamarin 対応 ViewModelLocator の実装
₋ Xamarin.Forms の PCL プロジェクトを追加
₋ Prism.Mvvm をプロジェクト参照に追加
₋ ViewModelLocator クラスを追加
Prism MVVM パッケージのソリューション構成
ないものは作るしかにゃい!
Xamarin.Forms PCL
プロジェクトを追加して拡張!
DEMOPrism 風 Xamarin
MVVM パターンサンプル
※このデモのソースコードは GitHub で公開中
https://github.com/matatabi-ux/XamarinPrismMVVM
Prism 画面遷移制御
FrameNavigationService PageViewModelSessionStateService
GetSessionStateForFrame
OnNavigateFrom
GetSessionStateForFrame
OnNavigateTo
PageFrame
OnNavigateFrom
Navigating
OnNavigateTo
Navigated
Prism の画面遷移の主な流れ
遷移履歴を管理
セッション情報を管理
遷移に呼応して ViewModel を操作
イベント駆動
イベント駆動
Navigate
セッション情報や遷移情報を渡す
セッション情報を渡す 必要な情報を
Model に保存
必要な情報をModel から復元
突然の終了からもアプリのデータを復帰できる!
Background 遷移時も呼び出す
Windows ストアアプリ の状態遷移
Not running
Running
Suspended
Terminated
Foreground Background
Not running アプリが起動していない状態 Running アプリ利用中 Suspended メモリ確保中でアプリ停止
Terminated データを退避しメモリ解放
ファイルからデータを読み遷移履歴・画面を復元! Low memory
Activate
Launch
Suspending
Launch
ClosedByUser
ファイルにデータ保存
Terminated 中はアプリはディスクに完全退避する!
省メモリ&省電力
Windows Phone 8.0 の状態遷移
Not running
Running
Dormant
Tombstoned
Foreground Background
Not running アプリが起動していない状態 Running アプリ利用中 Dormant メモリ確保中でアプリ停止
Tombstone データを退避しメモリ解放
ViewModel は復元できる遷移履歴までは復元できず
Low memory
Application_Activated
Application_Activated
Application_Deactivated
Application_Launching
Application_Closing
メモリ解放
似てるけど遷移履歴は戻せない
iOS アプリの状態遷移
Not running
Inactive
Active
Background Suspended
Foreground Background
Not running アプリが起動していない状態 Inactive ロック状態などイベント無受信 Background バックグラウンド動作中
Active アプリ利用中 Suspended メモリ確保中でアプリ停止
5秒~10分後
次回の起動時間を短縮できる
Low memory
アプリ停止メモリは確保
永続もある
Android アプリ(1画面)の状態遷移
Starting Running
Paused
Stopped
Starting 画面生成中 Running 画面表示中 Stopped メモリ確保中で画面非表示
Paused 画面の非表示途中 Destroyed 画面の破棄
表示時間を短縮できる
Low memory
/ Rotation
Destroyed
onPause()
onResume()
onResume()
Low memory
onDestroy()
回転しただけで破棄!
画面ごとに状態遷移
Prism 風 Xamarin 画面遷移制御
NavigationService PageViewModel
OnNavigateFrom
OnNavigateTo
PageNavigationPage
非表示
NavigateAsync
Disappearing
表示
Prism 「風」 Xamarin.Forms 画面遷移の主な流れ
遷移履歴を管理
遷移に呼応してViewModel を操作
イベント駆動遷移情報を渡す
セッション情報の管理はあきらめ・・・
必要な情報をModel に保存
必要な情報をModel から復元
最低限自前で必要なデータを退避できるように
Background 遷移時も呼び出す
NavigateAsync
DEMOPrism 風 Xamarin
画面遷移サンプル
※このデモのソースコードは GitHub で公開中
https://github.com/matatabi-ux/XamarinPrismNavigation
まとめ
• Prism は Xamarin でも(手を加えれば?)使える!
⁃ ViewModelLocator は Xamarin 向けに追加実装が必要
⁃ Bootstrap(起動処理)、画面遷移、ライフサイクル管理などは自前実装が必要
⁃ イベント集約・発信に EventAggregator、DI コンテナに Unity がそのまま使える!
• Xamarin.Forms ベースでの利用がおすすめ
⁃ ViewModelLocator など XAML 向け機能は Xamarin.Forms と相性がよい
⁃ Xamarin.Forms で足りない部分は ViewRenderer で補完
下記 SlideShare にて実装方法は紹介中!
http://www.slideshare.net/tatsujkuroyanagi/xamarin-39884614
委譲先の振り分け
プラットフォーム固有描画
XamarinForms
参考情報
• C#、XAML、Windows ランタイム向け Prism を使った Windows ストア ビジネス アプリの開発
http://msdn.microsoft.com/ja-jp/library/windows/apps/xx130643.aspx
• Prism for Windows Runtime サンプル(AdventureWorksShopper)
https://code.msdn.microsoft.com/windowsapps/Prism-for-the-Windows-86b8fb72/
• Windows 8.1 におけるストア ビジネスアプリの設計と開発(鈴木章太郎さんの SlideShare & ブログ)
http://www.slideshare.net/shosuz/windows-81-32601780
http://blogs.msdn.com/b/shosuz/archive/2014/03/23/windows-8-1-mvp-community-camp-2014-demo-1.aspx
http://blogs.msdn.com/b/shosuz/archive/2014/03/23/windows-8-1-mvp-community-camp-2014-demo-2.aspx
http://blogs.msdn.com/b/shosuz/archive/2014/03/28/windows-8-1-mvp-community-camp-2014-demo-3.aspx
http://blogs.msdn.com/b/shosuz/archive/2014/03/30/windows-8-1-mvp-community-camp-2014-demo-4.aspx
http://blogs.msdn.com/b/shosuz/archive/2014/04/02/windows-8-1-mvp-community-camp-2014-demo-5.aspx
• Unity 3.5.1405-prerelease(Xamarin で利用可能な DI コンテナ)
https://www.nuget.org/packages/Unity/3.5.1405-prerelease