© 2016 @nuits_jp
Why
Prism for
Xamarin.Forms
2016.10.28 JXUGC #18
© 2016 @nuits_jp
中村 充志 / Atsushi Nakamura
• Enterprise系アプリケーションアーキテクト
• Prism for WPFを仕事にて活用
• Xamarinを仕事にしたくて奮闘中
• Twitter : @nuits_jp
• Blog : http://www.nuits.jp
• Company : RICOH JAPAN Corp.
2
自己紹介
© 2016 @nuits_jp
次のふたつを理解していただくこと
• なぜPrismを使うべきか?
• だれがPrismを使うべきか?
3
Today’s Goal
© 2016 @nuits_jp
• Introduction
• What is Prism? & What do you get?
• Why Prism for Xamarin.Forms?
• DEMO
4
Agenda
© 2016 @nuits_jp
Agenda
• Introduction
• What is Prism? & What do you get?
• Why Prism for Xamarin.Forms?
• DEMO
5
© 2016 @nuits_jp
• Xamarin.Formsをつかう
→ MVVMパターンにしよう
→ 素のままだとつらい!
Introduction
© 2016 @nuits_jp
7
MVVM Patternで、辛くなりやすいところ
Binding &
Command
Update
NotificationNotification
• 画面遷移
• 確認ダイアログ
• 選択ダイアログ
© 2016 @nuits_jp
• Xamarin.Formsをつかう
→ MVVMパターンにしよう
→ 素のままだとつらい!
→ MVVM支援ライブラリつかいたい!
Prism or MVVM Light Toolkit?
何つかおう?
© 2016 @nuits_jp
9
Who is He?
© 2016 @nuits_jp
10
God has told us
© 2016 @nuits_jp
完 11
© 2016 @nuits_jp
12
Prism or MVVM Light Toolkit
© 2016 @nuits_jp
Agenda
• Introduction
• What is Prism? & What do you get?
• Why Prism for Xamarin.Forms?
• DEMO
13
© 2016 @nuits_jp
• XAML Application Framework
• Guidance
• Patterns & Practices
• Testable & Maintainable
• Open Source
• .NET Foundation
14
What is Prism?
© 2016 @nuits_jp
• MVVM Support
• Commanding
• Messaging
• Navigation
• Page Dialog Service
• Dependency Injection
• Logging
15
What do you get?
© 2016 @nuits_jp
Agenda
• Introduction
• What is Prism? & What do you get?
• Why Prism for Xamarin.Forms?
• DEMO
16
© 2016 @nuits_jp
17
Prism & MVVM Light Toolkit
© 2016 @nuits_jp
18
Prism & MVVM Light Toolkit
© 2016 @nuits_jp
• MVVM Support
• Commanding
• Messaging
• Navigation
• Page Dialog Service
• Dependency Injection
• Logging
19
What do you get?
© 2016 @nuits_jp
• XAML Application Framework
• Guidance
• Patterns & Practices
• Testable & Maintainable
• Open Source
• .NET Foundation
20
What is Prism?
© 2016 @nuits_jp
21
よく見かけるMVVMの図
Binding &
Command
Update
NotificationNotification
プレゼンテー
ション
その他
© 2016 @nuits_jp
22
実際の割合
Binding &
Command
Update
NotificationNotification
プレゼンテー
ション
その他
© 2016 @nuits_jp
23
Viewが厚くて凄い例①
@masatoru氏作
SkiaSharpで自力で縦組View
© 2016 @nuits_jp
24
Viewが厚くて凄い例②
@omanuke氏作
SkiaSharpで自力描画している株式チャート
© 2016 @nuits_jp
25
実際の割合
Binding &
Command
Update
NotificationNotification
プレゼンテー
ション
その他
© 2016 @nuits_jp
Modelにも
• 専門性の高い領域
• テストが難しい領域
が多数存在します
モバイル&クロスプラットフォーム開発
© 2016 @nuits_jp
• プラットフォーム依存領域
• 時間
• 非同期処理
• プッシュ通知
• センサー類(位置情報、加速度、カメラ)
モバイルクロスプラットフォームは課題の
山
© 2016 @nuits_jp
• PrismはMVVMの課題だけでなく、これらの課
題に対しても、ガイダンスを提供します
• Prismはアプリケーションを開発する上での、
パターンとプラクティスの集合です
• そしてこれらは、テスト容易性と保守容易性
を提供します
Why Prism for Xamarin.Forms
© 2016 @nuits_jp
「MVVM初めてやるけど、Prismって難しそう」
という人ほど、使うべきです。
だれがPrismを使うべきか?
© 2016 @nuits_jp
#DEMO
30
© 2016 @nuits_jp
• 素のXamarin.Formsのみで作ったアプリを
Prismを適用してリファクタリングします
• TDD(Test First)でいきます
• TestではMoqを利用します
• ReSharper先生最高!
デモ概要
© 2016 @nuits_jp
32
デモアプリクラス構成
class Class Model
Xamarin.Forms
ModelViewModelView
UWP
Android
iOSPCL
MainPage MainPageViewModel
TextSpeachPage TextSpeachPageViewModel
«interface»
ITextSpeachService
TextSpeachService
TextSpeachService
TextSpeachServiceDependencyServiceNavigationPage
«instantiate»
«instantiate»«use»
«use»
«instantiate»
© 2016 @nuits_jp
#DEMO
33
© 2016 @nuits_jp
https://github.com/nuitsjp/WhyPrismSession
このあとすぐ資料をTwitterに案内します。
dotsのイベントページへの紐づけもしますので、
何れかからご覧ください。
デモコードのリポジトリ
© 2016 @nuits_jp
いい入門サイトをたまたま知ってます!
【Xamarin】Prism.Forms入門
http://www.nuits.jp/entry/2016/08/22/173858
Xamarin関わらず多数の日本語のPrism情報があります
Prism自習用リポジトリ
https://github.com/runceel/PrismEdu
35
まとめ
© 2016 @nuits_jp
#Xamarinはいいぞ
36
© 2016 @nuits_jp
#Prismもいいぞ
37

Why prism for xamarin.forms