Freigeben über


Developing a Windows Phone Application using the MVVM Pattern (from P&P)

皆様、こんにちは!

patterns & practices Developer Center

新 Patterns & Practices コンテンツ

本日は、今後、MSDN等で詳しくご紹介するかもしれませんが、取り急ぎ、先日Twitterでもご紹介した、こちらのコンテンツを軽くご紹介しましょう。

対象者

このドキュメントとサンプルアプリケーションが対象としている開発者像は、①若干の C# による開発経験と、②Silverlight に関する経験、そして③Windows Phone 7.0 or 7.1 SDKを使って開発をしたことがあること、ということで、それほどハードルは高くないです。その意味では、いわゆる (1)  Model-View-ViewModel (MVVM) パターンに関してや、(2) Dependency injection 等については、大体どんなものか知っていれば使えるようになっています。

PetrolTracker Sample Application

このドキュメントについているサンプルアプリケーションの名前は、 ”PetrolTracker”です。これは、Silverlight for Windows Phone OS 7.1 で記述されています。下記のリンクからダウンロードして使ってみてください。

Hh848247.400118F43040026B63A6943B0BE85194(en-us,PandP.10).png

この PetrolTracker アプリケーションは、二つの同じアプリケーションに加えて、それをサポートするライブラリ群から構成されています。 2つの異なる方法で同じアプリケーションを作成し配布することにより、いわゆる分離コードによる実装から、View Model による実装への進化がわかり易くなります。後者には Dependency injection が使われています。

   PetrolTracker アプリケーションを使うと、3つの異なるサンプルの車両の使用状況をトラッキングすることができます。3種類の車両のうちの一つを選択でき、”満タン” データを車両に追加することができ、その”満タン”データを、リスト表示できます。もう一つのオプションは、”満タン”データをチャート表示でき、そのチャートは miles per gallon (MPG) および cost でソートできるのです。しかしながら、この PetrolTracker アプリケーションは、このフィーチャーを実装していません。その代わりにハードコードされたチャートイメージを使ってます。下記にそれらのイメージを示します。

Follow link to expand image

PetrolTracker を実行するためには、必要な実装をする必要があります。PetrolTracker.CodeBehind oまたは PetrolTracker.MVVM のいずれかをスタートアッププロジェクトに設定します。これは当然、Visual Studio 2010 のソリューションエクスプローラ内で行います。どちらのアプリケーションをスタートアップに選んだとしても、UIは変わりませんし操作方法も変わりません。

アプリケーションのスタートアップにおいて、Splash Screen が表示され、その間にIsolated Storageの中にサンプルデータが作成されます(もし既に存在しなければ)。データの変更はこの Isolated Storage に保存され、このアプリケーションが稼働している間、保持されます。また、データの妥当性検証は制限的です。

このサンプルデータは、3種類の車両から構成され、それぞれのイメージと、4か月分の満タンデータが含まれます。一番最近の”満タン”にしたという記録は、少なくとも現在の日付の一週間前以上のランダムな日付が付与され、それにより更に満タンデータを追加するときに、そのデータは通常の使用データとして出てきます。

The PetrolTracker Solution

PetrolTracker ソリューションは、ソースコードと他のリソースからできているプロジェクトです。

PetrolTracker solution の構成は次表の通りです。

Project Description
PetrolTracker.CodeBehind This project contains the code-behind implementation of the PetrolTracker application, and consists of views with supporting classes and resources.
PetrolTracker.Common This project contains constants and the PageStateHelper class, which is used to retrieve and cast objects that are saved in page state. Both items are used by the code-behind and the MVVM implementations of the PetrolTracker application.
PetrolTracker.Model This project contains the model classes used by both the code-behind and MVVM implementations of the PetrolTracker application.
PetrolTracker.SampleData This project contains the DataGenerator class that is used to seed isolated storage with sample car fill-up data.
PetrolTracker.MVVM This project contains the MVVM implementation of the PetrolTracker application, and consists of view models and views, along with supporting classes and resources.
PetrolTracker.MVVM.Adapters This project contains facades for Windows Phone 7.1 SDK API functionality.
PetrolTracker.MVVM.Tests This project contains mock service implementations and unit tests used for testing view model and model classes.

なお、Lib プロジェクトフォルダーは、コンパイル済みのアセンブリでアプリケーションが使用するものから構成されています。

Prism

Prism はMicrosoft patterns & practices チームの手による、フリーのライブラリです。このライブラリの中にあるコンポーネント群を使えば、開発者は Windows Presentation Foundation (WPF)、 Microsoft Silverlight、そして Windows Phone プラットフォームの開発を行うに際し、より簡単に、プロジェクトをメンテナンスしたり新たな要求に応じて更新したりすることができるようになります。

Prism はもともとはコンポジットアプリケーションシナリオのために作成されたものでした。コンポジットアプリケーションシナリオでは、典型的に想定しているのはシェルアプリケーションとモジュール群で、それらモジュール群がアプリケーションを構成する全てのピースとなっているというものでした。

しかし、Prism は現在このアプリケーションのスタイルをサポートし、多くのPrism内のコンポーネントは、Silverlight applications for Windows Phone を作成するのに非常に便利となっています。例えば、Prism が持つ DelegateCommand を使えば、独自のインターフェイスの実装の必要性を回避することができます。

この Windows Phone 用の Prism ライブラリ は、メインのPrism ライブラリの特長のサブセットを含んでおり、これにより開発者が Windows Phone アプリケーションを実装するにあたり遭遇するであろう共通の課題を解決できます。このライブラリには、クラス群が含まれており、これにより開発者は、Commands、Navigation、Observable object notifications、Data template selection、Interaction with notifications、Interaction with the application bar、その他を利用できます。

この Windows Phone 用 Prism ライブラリ は、 PetrolTracker MVVM application の中の1アセンブリとして提供されています。

ということで、それではまた!

鈴木 章太郎