がりらぼ

WindowsRuntimeの応援ブログ

Prism for WindowsRuntimeとは何なのかまとめてみる

最近Prism for WindowsRuntimeの8.1英語verがリリースされたようです。
MSDN Blogs
最近少し熱がこもりかけているPrismforWinRTについて調べてみました。

そもそもPrismとはなんなのか

patterns & practicesチームが作っているXAML系プラットフォーム向けのライブラリ
XAML系プラットフォームとはWPFストアアプリSilverlightWindowsPhoneなどですね。
ライブラリというだけあって、今でも十分クラスライブラリ化されている.Netframeworkの機能をさらに便利に、簡易に使えるようにしてくれるライブラリみたいです。
Prism for WinRTとは、WindowsRuntime(ストアアプリ)向けのPrismということです。

どんな機能があるの?

公式解説ページの主要トピック一覧です

AdventureWorks Shopper の概要
AdventureWorks Shopper のガイダンスの概要
Windows ランタイム向けの Prism の使用
AdventureWorks Shopper ユーザー エクスペリエンスの設計
AdventureWorks Shopper の Model-View-ViewModel (MVVM) パターンの使用
AdventureWorks Shopper のページの作成とページ間の移動
AdventureWorks Shopper のタッチの使用
AdventureWorks Shopper のユーザー入力の検証
AdventureWorks Shopper のアプリケーション データの管理
AdventureWorks Shopper の中断、再開、アクティブ化の処理
AdventureWorks Shopper の疎結合コンポーネント間の通信
AdventureWorks Shopper のタイルの操作
AdventureWorks Shopper の検索の実装
AdventureWorks Shopper でのパフォーマンスの向上
AdventureWorks Shopper のテストと展開
AdventureWorks Shopper チームの紹介
AdventureWorks Shopper のクイック スタート
Windows ランタイム向けの Prism のリファレンス

なんだか、Windowsストアアプリの全体的な機能をライブラリ化してくれてるみたいですね。

MVVMの標準サポート

なかでも大きな機能はMVVMモデルの標準サポートだと思います。
今までMVVMを実装するにはMVVMLightなどの外部ライブラリか、自分で1からコマンドを実装する必要があったり、いろいろめんどくさいです。
PrismではDelegateCommandというコマンドクラスなどが標準で容易され、簡単に実装できそうです。INotifyPropertyChangedに関してもBindableBaseというクラスが通知を簡略化してくれるみたいです。

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

これも面白いです。
通常、プロジェクトが大きくなると、クラス間のデータのやりとりはちゃんとした設計がされてないとデータを受け渡すことができなかったり、あっちこっちで参照してデータを受け渡すと、それこそカルボナーラと言わんばかりのスパゲッティの完成です。
疎結合とはお互いに参照関係を持たないクラス同士のことです。
つまり、参照をしていないオブジェクトとのデータ通信が可能となるということです。(たぶん
どのようにデータ通信するかというと、
PubSubEventというクラスを継承したEventを作成し、発行者と受信者を決めてイベントを発生させるっぽいです。
スパゲッティにならないようにクラス設計をするのが理想ですが、イベントを一箇所に集約することでスパゲッティともおさらばかもしれませんね
AdventureWorks Shopper の疎結合コンポーネント間の通信 (C#、XAML、Prism を使った Windows ストア ビジネス アプリ) (Windows)

VSMによるレイアウト定義の復活

Windows8.1になるまではページのポートレート表示、ランドスケープ表示などはVisualStateManagerで定義されていました。Windows8.1からは様々な解像度に対応するために廃止されましたが、PrismのVisualStateAwarePageはVisualStateManagerによる定義にもどるっぽいです。

ライブラリ入手方法

ライブラリ入手方法についてはここで詳しく解説されていますが
NugetでPrism.StoreApps と Prism.PubSubEventsを追加する方法が楽そうです。

全然まとまってないまとめ

Prismとは何なのかについてゆるくまとめてみました。
今回調べたものだけでなく、もっとおおくの機能がPrismでは実装されています。
ストアアプリの記述方法を全体的に変更することになるので新しい書き方になるのかもしれませんね。
今後、実際の作り方など追っていきたいと思います。

謝辞

けっこう想像で書いたところも多少あるので間違ってたらおしえてください。