Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Xamarin で Prism を使いたい!
2014/11/22(土) JXUGC #2 東日本編
@matatabi-ux
「正式対応」 まで待てない人のための Prism 利用 Tips
い い ネ コ の 日
お や く そ く
掲載内容は個人の私見であり、
所属組織の見解ではありません
自己紹介: 黒柳 達士(@matatabi-ux)
• お仕事
⁃ 某第二工場で Windows ストアアプリ大量生産中
⁃ 拝承系 SIer → 安心簡単快適デザイン会社 → 現職
• 個人活動
⁃ Blog: 「しっぽを追いかけて」 htt...
今回の目標とおことわり
• 目標
⁃ XAML プラットフォーム向け実装ライブラリである Prism(Windows ランタイム版)のご紹介
⁃ Xamarin でも Prism を使ってみたい!と思ってもらう(MvvmCross だけじゃない...
おしながき
• Prism for Windows Runtime の概要
• Prism の Xamarin 対応状況
• Prism 風 Xamarin MVVM パターン
• Prism 風 Xamarin 画面遷移制御
• まとめ
Pr...
Prism
Prism for Windows Runtime の
概要
Prism for Windows Runtime の概要
Windows ランタイム*1 向けビジネスクライアントアプリ開発用ライブラリ
⁃ Microsoft patterns & practices チームが進めているプロジェクト成果物の...
アプリ起動処理
Prism for Windows Runtime の概要
View 基底クラス
ViewModel Locator
Views
ViewModel 基底クラス
ViewModels
Delegate Command
Model...
アプリ起動処理 インフラストラクチャ
Prism for Windows Runtime の概要
View 基底クラス
ViewModel Locator
Views
ViewModel 基底クラス
ViewModels
Delegate Co...
Xamarin
×
Prism
Prism の Xamarin 対応状況
Prism の Xamarin 対応状況
Prism for Windows Runtime のリリースパッケージ
Prism MVVM Prism PubSubEvents Prism StoreApps
提供機能
Model-View-Vi...
Xamarin
×
Prism
×
MVVM
Prism 風 Xamarin
MVVM パターン
Prism 風 Xamarin MVVM パターン
Prism MVVM パッケージのソリューション構成
ソースコードのダウンロード先
https://pnpmvvm.codeplex.com/SourceControl/latest#
ソース...
Prism 風 Xamarin MVVM パターン
ViewModel を View にバインドする実装基盤
₋ IView :DataContext プロパティをもつ View インタフェース
₋ ViewModelLocatorProvid...
Prism 風 Xamarin MVVM パターン
Xamarin 対応 ViewModelLocator の実装
₋ Xamarin.Forms の PCL プロジェクトを追加
₋ Prism.Mvvm をプロジェクト参照に追加
₋ View...
DEMO
Prism 風 Xamarin
MVVM パターンサンプル
※このデモのソースコードは GitHub で公開中
https://github.com/matatabi-ux/XamarinPrismMVVM
Xamarin
×
Prism
×
Navigation
Prism 風 Xamarin
画面遷移制御
Prism 画面遷移制御
FrameNavigationService PageViewModelSessionStateService
GetSessionStateForFrame
OnNavigateFrom
GetSessionStat...
Windows ストアアプリ の状態遷移
Not running
Running
Suspended
Terminated
Foreground Background
Not running アプリが起動していない状態 Running アプリ利...
Windows Phone 8.0 の状態遷移
Not running
Running
Dormant
Tombstoned
Foreground Background
Not running アプリが起動していない状態 Running アプリ...
iOS アプリの状態遷移
Not running
Inactive
Active
Background Suspended
Foreground Background
Not running アプリが起動していない状態 Inactive ロック...
Android アプリ(1画面)の状態遷移
Starting Running
Paused
Stopped
Starting 画面生成中 Running 画面表示中 Stopped メモリ確保中で画面非表示
Paused 画面の非表示途中 De...
Prism 風 Xamarin 画面遷移制御
NavigationService PageViewModel
OnNavigateFrom
OnNavigateTo
PageNavigationPage
非表示
NavigateAsync
Di...
DEMO
Prism 風 Xamarin
画面遷移サンプル
※このデモのソースコードは GitHub で公開中
https://github.com/matatabi-ux/XamarinPrismNavigation
まとめ
• Prism は Xamarin でも(手を加えれば?)使える!
⁃ ViewModelLocator は Xamarin 向けに追加実装が必要
⁃ Bootstrap(起動処理)、画面遷移、ライフサイクル管理などは自前実装が必要
⁃...
参考情報
• C#、XAML、Windows ランタイム向け Prism を使った Windows ストア ビジネス アプリの開発
http://msdn.microsoft.com/ja-jp/library/windows/apps/xx1...
Upcoming SlideShare
Loading in …5
×

Xamarin で Prism を使いたい! ~「正式対応」 まで待てない人のための Prism 利用 Tips~

1,535 views

Published on

Xamarin で Prism を使いたい!
~「正式対応」 まで待てない人のための Prism 利用 Tips~
2014/10/22(土) JXUGC #2 東日本編
@matatabi-ux

Published in: Technology
  • Be the first to comment

Xamarin で Prism を使いたい! ~「正式対応」 まで待てない人のための Prism 利用 Tips~

  1. 1. Xamarin で Prism を使いたい! 2014/11/22(土) JXUGC #2 東日本編 @matatabi-ux 「正式対応」 まで待てない人のための Prism 利用 Tips い い ネ コ の 日
  2. 2. お や く そ く 掲載内容は個人の私見であり、 所属組織の見解ではありません
  3. 3. 自己紹介: 黒柳 達士(@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 しっぽもふもふの自宅警備ネコ 「モカ」
  4. 4. 今回の目標とおことわり • 目標 ⁃ XAML プラットフォーム向け実装ライブラリである Prism(Windows ランタイム版)のご紹介 ⁃ Xamarin でも Prism を使ってみたい!と思ってもらう(MvvmCross だけじゃないよ!) • 注意事項 ⁃ Xamarin は現在進行形で進化中なので仕様が大きく変わるかも ⁃ XAML をある程度知っている C# エンジニア視点でまとめました ⁃ しばらくしたら Prism の中の人がもっと洗練されたライブラリを見せてくれるはず いちエンジニアの悪あがきとしてあまり期待せずにお聞きください・・・ ⁃ Xamarin.iOS しか持ってません・・・Android 勢の皆さんごめんなさい;
  5. 5. おしながき • Prism for Windows Runtime の概要 • Prism の Xamarin 対応状況 • Prism 風 Xamarin MVVM パターン • Prism 風 Xamarin 画面遷移制御 • まとめ Prism にはもっともっと機能はあ りますが今回はこのあたりに絞っ てます! ※ この発表資料は SlideShare で公開します http://www.slideshare.net/tatsujkuroyanagi/xamarin-prism
  6. 6. Prism Prism for Windows Runtime の 概要
  7. 7. Prism for Windows Runtime の概要 Windows ランタイム*1 向けビジネスクライアントアプリ開発用ライブラリ ⁃ Microsoft patterns & practices チームが進めているプロジェクト成果物のひとつ ⁃ 設計や実装が容易で拡張性に優れた柔軟なアプリを作るための開発ライブラリと実践パターンを提供 ⁃ ビジネスアプリ以外にも有効な機能やガイドがたくさん ⁃ WPF や Silverlight など他の XAML プラットフォーム向けの Prism もある *1:Windows ストアアプリや Windows Phone 8.1 などの実行基盤 今後は Windows 系プラットフォームの主流になるはず? View ViewModel Model Bootstrap Navigation Event Aggregator App Lifecycle Management XAML 向けなので Native UI より Xamarin.Forms 利用の方がラク!
  8. 8. アプリ起動処理 Prism for Windows Runtime の概要 View 基底クラス ViewModel Locator Views ViewModel 基底クラス ViewModels Delegate Command ModelsValidation 基底クラス データリポジトリ サービスプロキシ データアクセス層 アプリケーション 抽象クラス アプリケーション 画面遷移制御 ライフサイクル管理 疎結合コンポーネント間通信 DI コンテナ (オプション) Prism の提供機能 要実装機能 凡例 ビュー層 ビューモデル層 モデル層 インフラストラクチャ Unity ライブラリ が利用可能
  9. 9. アプリ起動処理 インフラストラクチャ Prism for Windows Runtime の概要 View 基底クラス ViewModel Locator Views ViewModel 基底クラス ViewModels Delegate Command ModelsValidation 基底クラス データリポジトリ サービスプロキシ ビュー層 ビューモデル層 モデル層 データアクセス層 アプリケーション 抽象クラス アプリケーション 画面遷移制御 ライフサイクル管理 DI コンテナ (オプション) Unity ライブラリ が利用可能 Prism の提供機能 要実装機能 凡例 疎結合コンポーネント間通信 お時間の都合で・・・ 今回のご紹介範囲は これだけ ><
  10. 10. Xamarin × Prism Prism の Xamarin 対応状況
  11. 11. 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 現在の状況
  12. 12. Xamarin × Prism × MVVM Prism 風 Xamarin MVVM パターン
  13. 13. Prism 風 Xamarin MVVM パターン Prism MVVM パッケージのソリューション構成 ソースコードのダウンロード先 https://pnpmvvm.codeplex.com/SourceControl/latest# ソースコードはこちらから ダウンロード可能! View からの命令・操作をクラス化する Command パターン実装基盤 ₋ DelegateCommand :非同期処理を仲介できるコマンドクラス ₋ CompositeCommand :複数のコマンドを集約するコマンドクラス View にデータ変更を通知する実装基盤 ₋ BindableBase :プロパティ値の変更を通知するバインド可能な基底クラス ₋ ErrorContner :入力値の検証結果をもつ基底クラス ₋ PropertySupport :プロパティを名称の文字列に置換するユーティリティクラス
  14. 14. Prism 風 Xamarin MVVM パターン ViewModel を View にバインドする実装基盤 ₋ IView :DataContext プロパティをもつ View インタフェース ₋ ViewModelLocatorProvider :ViewModel を生成・保持するための管理クラス ₋ ViewModelLocator :View に ViewModel を自動バインドするクラス View と ViewModel の関連付けには MvvmCross のように 暗黙的規則も明示的規則も指定できます View に依存するので Xamarin 対応 モジュールはまだ提供されてません; Prism MVVM パッケージのソリューション構成
  15. 15. Prism 風 Xamarin MVVM パターン Xamarin 対応 ViewModelLocator の実装 ₋ Xamarin.Forms の PCL プロジェクトを追加 ₋ Prism.Mvvm をプロジェクト参照に追加 ₋ ViewModelLocator クラスを追加 Prism MVVM パッケージのソリューション構成 ないものは作るしかにゃい! Xamarin.Forms PCL プロジェクトを追加して拡張!
  16. 16. DEMO Prism 風 Xamarin MVVM パターンサンプル ※このデモのソースコードは GitHub で公開中 https://github.com/matatabi-ux/XamarinPrismMVVM
  17. 17. Xamarin × Prism × Navigation Prism 風 Xamarin 画面遷移制御
  18. 18. Prism 画面遷移制御 FrameNavigationService PageViewModelSessionStateService GetSessionStateForFrame OnNavigateFrom GetSessionStateForFrame OnNavigateTo PageFrame OnNavigateFrom Navigating OnNavigateTo Navigated Prism の画面遷移の主な流れ 遷移履歴を 管理 セッション情報を 管理 遷移に呼応して ViewModel を操作 イベント駆動 イベント駆動 Navigate セッション情報や 遷移情報を渡す セッション情報を 渡す 必要な情報を Model に保存 必要な情報を Model から復元 突然の終了からも アプリのデータを 復帰できる! Background 遷移時も呼び出す
  19. 19. Windows ストアアプリ の状態遷移 Not running Running Suspended Terminated Foreground Background Not running アプリが起動していない状態 Running アプリ利用中 Suspended メモリ確保中でアプリ停止 Terminated データを退避しメモリ解放 ファイルからデータを読み 遷移履歴・画面を復元! Low memory Activate Launch Suspending Launch ClosedByUser ファイルに データ保存 Terminated 中は アプリはディスク に完全退避する! 省メモリ&省電力
  20. 20. 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 メモリ解放 似てるけど 遷移履歴は戻せない
  21. 21. iOS アプリの状態遷移 Not running Inactive Active Background Suspended Foreground Background Not running アプリが起動していない状態 Inactive ロック状態などイベント無受信 Background バックグラウンド動作中 Active アプリ利用中 Suspended メモリ確保中でアプリ停止 5秒~ 10分後 次回の起動時間を短縮できる Low memory アプリ停止 メモリは確保 永続も ある
  22. 22. Android アプリ(1画面)の状態遷移 Starting Running Paused Stopped Starting 画面生成中 Running 画面表示中 Stopped メモリ確保中で画面非表示 Paused 画面の非表示途中 Destroyed 画面の破棄 表示時間を短縮できる Low memory / Rotation Destroyed onPause() onResume() onResume() Low memory onDestroy() 回転しただけで破棄! 画面ごとに 状態遷移
  23. 23. Prism 風 Xamarin 画面遷移制御 NavigationService PageViewModel OnNavigateFrom OnNavigateTo PageNavigationPage 非表示 NavigateAsync Disappearing 表示 Prism 「風」 Xamarin.Forms 画面遷移の主な流れ 遷移履歴を 管理 遷移に呼応して ViewModel を操作 イベント駆動 遷移情報を渡す セッション情報の管理はあきらめ・・・ 必要な情報を Model に保存 必要な情報を Model から復元 最低限自前で必要 なデータを退避 できるように Background 遷移時も呼び出す NavigateAsync
  24. 24. DEMO Prism 風 Xamarin 画面遷移サンプル ※このデモのソースコードは GitHub で公開中 https://github.com/matatabi-ux/XamarinPrismNavigation
  25. 25. まとめ • 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 委譲先の 振り分け プラットフォーム固有描画 Xamarin Forms
  26. 26. 参考情報 • 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

×