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

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

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

PrismPrism for Windows Runtime の

概要

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 の提供機能

要実装機能

凡例

疎結合コンポーネント間通信

お時間の都合で・・・

今回のご紹介範囲は

これだけ ><

Xamarin

×Prism

Prism の Xamarin 対応状況

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 現在の状況

Xamarin

×Prism

×MVVM

Prism 風 Xamarin

MVVM パターン

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

Xamarin

×Prism

×Navigation

Prism 風 Xamarin

画面遷移制御

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