原文
「Introduction to the Prism Library 5.0 for WPF」(外部サイト)の和訳です。
Introduction to the Prism Library 5.0 for WPF(外部サイト)
パターンと実践 ディベロパー・センター
Microsoft Prism Library 5.0 for WPFの開発者のガイドから:
Prismは、あなたが、Windows Presentation Foundation (WPF)デスクトップ・アプリケーションを、もっと簡単に、高機能な設計し、 そして、構築し、柔軟に、そして、簡単に保守するのを助けるために、設計された手引きを提供します。 Model View ViewModel (MVVM)、複数の要素で構成されたビューとイベント・アグリゲーターのような、デザインパターンを使用して、 それは、あなたを助けるモジュール・アプリケーションを作成する、重要な構造的な設計原理を実現します。- 独立して進化することができる疎く結合したコンポーネントを使用して、この種のアプリケーションは、複合アプリケーションとして知られています。
複合アプリケーションは、複数のスクリーンを通常は特徴とします。 高機能なユーザー・インタラクションとデータ・ビジュアライゼーション、 そして、重要なプレゼンテーションとビジネス・ロジックを実現します。 これらのアプリケーションは、一般的には、複数のバックエンドシステムとサービスと相互作用し、 そして、階層化アーキテクチャを使用して、物理的に複数の層にまたがって展開することができます。 アプリケーションは、新しい要件と商機に応じて、その寿命にわたって、著しく進化すると予想されます。 要するに、これらのアプリケーションは、「最後に構築」され、「変更のために構築」されます。 これらの特徴を要求しないアプリケーションでは、Prismを使用することで、利益を得ないかもしれません。
Prismには、参照の実装、クイックスタート、再使用できるライブラリーコード(Prismライブラリ)と広範囲なドキュメンテーションが含まれています。 Prismのこのバージョンは、Microsoft .NET ramework 4.5を対象とし、 Model View ViewModel (MVVM)パターン、ナビゲーションとManaged Add-in ramework(MAF)の周辺の新しい手引きが含まれています。 Prismは、.NET Framework 4.5でビルドされるため、(WPFが含まれています)、 これらの技術に精通することは、Prismを評価して、採用するために役に立ちます。
Prismを学ぶことは、難しくありませんが、開発者が、新しいかもしれない、パターンと実践を受け入れるために、準備ができ、 そして、したくなっている必要があることに注意する必要があります。経営の理解とコミットメントは、非常に重要です。 そして、プロジェクトの最終期限は、これらのパターンと実践を学ぶために、優先的に時間の投資に対応する必要があります。
なぜ、Prismを使用するのでしょうか?
高機能なWPFクライアント・アプリケーションを設計・構築することは、保守に挑戦することが、柔軟で簡単になります。 この項目では、WPFクライアント・アプリケーションを構築するとき、あなたが遭遇するかもしれない一般的な難題のいくつかを示します。 そして、それらの難問に取り組むために、Prismが、あなたをどのように助けるかについて説明します。
クライアントアプリケーション開発の課題
Client Application Development Challenges
一般的に、クライアント・アプリケーションの開発者は、かなり多くの難問に取り組みます。 アプリケーションの要件は、時間とともに変更することができます。新しい商機と挑戦は、それら自身に存在するかもしれません。 新技術は、利用できるようになるでしょう。あるいは、開発サイクルの間の継続的な利用者のフィードバックでさえ、 アプリケーションの要件にかなり影響を与えるかもしれません。その結果、それで、柔軟で、時間とともに、簡単に、修正し 、拡張することができるアプリケーションを構築することは重要です。この種の柔軟性のための設計は、達成するのが困難です。 それは、アプリケーションの残りの部分に影響を与えることなく、 分離して、後で、修正や、更新することができる、独立して開発され、テストされた、 アプリケーションのそれぞれの部品を提供する、アーキテクチャが必要です。
ほとんどのエンタープライズ・アプリケーションは、おそらく、開発者の大規模なチームでさえ、複数の開発者を必要とするために、 いやというほど複雑です。それは、開発者に加えて、ユーザーインターフェイス(UI)設計者とローカライザが含まれています。 これは、アプリケーションを、どのように設計するか、決定するための重要な挑戦することができます。それで、その複数の開発者やサブチームは、 独立して、アプリケーションの異なる部分の上で、効果的に作業することができます。 それでも、アプリケーションに統合されるとき、破片が継ぎ目なく集まることは、確実です。
統一されたスタイルでアプリケーションを設計・構築することは、極めて難しく、保守することが非効率的な、 アプリケーションに導くことができます。この場合、「モノリシック」は、コンポーネントは、 極めて密接に結合したアプリケーションを参照します。そして、両者の間に明確な分離がありません。 通常は、このように設計・構築されたアプリケーションは、開発者の生活を厳しくする問題で苦しみます。 これは、新しい機能をシステムに追加したり、既存の機能を置き換えることは困難です。 それは、システムの他の部分を壊すことなく、バグを解決することは困難です。 そして、それは、テストして、配布するのが困難です。 また、それは、互いに効率的に作業するための、開発者とデザイナーの機能に衝撃を与えます。
複数の要素で構成されたアプローチ
The Composite Approach
これらの課題のための効果的救済策は、いくつかの別々の、疎く結合した、半ば独立した構成要素にアプリケーションを分割することです。 それは、続いて、首尾一貫したソリューションのためのアプリケーション「シェル」に、互いに簡単に統合できます。 このように設計・構築されたアプリケーションは、多くの場合、複合アプリケーションとして、知られています。
それらは、異なる個人やサブチームで、モジュールを個別に開発し、テストし、配布して提供します。; また、それらは、それらを、もっと簡単に新しい機能性で、修正し、拡張することができます。 それによって、アプリケーションは、もっと簡単に拡張し、保守することができます。 複数の要素で構成されたアプローチを使用して、よりテストしやすく、保守しやすいアプリケーションを作成する際に 、一人のプロジェクトさえ利益を経験できることに注目してください。
それらは、疎く結合した方法で実行する、さまざまなモジュールに寄与する、一般的なUIの構成要素で成り立つシェルを提供します。 これは、新しい機能をUIに追加する複数の開発者から生じる競合を削減します。そして、それは、一般の外観を促進します。
それらは、ログの記録と認証と、このような、あなたのアプリケーションに固有のビジネス機能のような、垂直機能のような、 アプリケーションの水平機能の間で、再使用と関心事の明確な分離を促進します。 また、これは、あなたが、より簡単に依存関係、そして、アプリケーション構成要素間の相互作用を管理することができます。
それらは、異なる個人、あるいは、特定のタスクに集中するサブチーム、 あるいは、それらの焦点や専門知識に応じた機能の一部にまかせることによって、役割の分離を維持するのを助けます。 特に、それは、UIとアプリケーションのビジネス・ロジックの間で、よりきれいな分離を提供します。 -これは、UIの設計者が、より高機能なユーザー・エクスペリエンスを作成することに、集中できることを示しています。
複合アプリケーションは、クライアント・アプリケーションの筋書きの範囲では、とても適切です。 例えば、複合アプリケーションは、対照的なバックエンドシステムに比べて、高機能なエンド・ユーザー・エクスペリエンスを作成するために理想的です。 次の説明は、複合アプリケーションのこの形式の使用例を表示します。
複数のバックエンドシステムと複合アプリケーション
この種のアプリケーションにおいて、ユーザーは、各々は、タスク指向の焦点を提供する機能上に、複数の特定の目的のモジュールによって、 複数のバックエンドシステム、サービス、および、データ・ストアに及ぶ場所に、表示される、高機能で柔軟なユーザー・エクスペリエンスを提出できます。 アプリケーション・ロジックとUIの間の明確な分離は、アプリケーションが、同一のもの、そして、すべての構成モジュールの中の区別された外観を提供することができます。
さらに、複合アプリケーションは、役に立つことがあります。UIの構成要素が独立して進化しているとき、互いにかなり統合され、そして、別々のチームによって頻繁に維持されています。 次の図は、この種のアプリケーションのスクリーン・ショットを示します。強調されたそれぞれ領域は、UIで構成される独立した構成要素を表しています。
株トレーダーのリファレンス実装複合アプリケーション
この場合、複合アプリケーションは、UIを、ダイナミックに構成できます。これは、柔軟なユーザー・エクスペリエンスを提供します。 例えば、それは、新しい機能性を、アプリケーションの実行時に、動的に追加することができます。それは、高機能なエンドユーザー・カスタマイズと拡張を可能にします。
Prismで対処されない難問
Challenges Not Addressed by Prism
Prismは、あなたが、直面するかもしれない、多くの難問に対処することを助けますが、WPFアプリケーションを構築するとき、 あなたは、あなたのアプリケーションの筋書きと要件に応じて、それに、直面するかもしれない、 他の多くの課題があります。例えば、Prismは、次に示す項目を、直接、対処しません。:
- 不定期な接続とデータの同期
- サービスとメッセージ送信基盤構造設計
- 認証と認可
- アプリケーションのパフォーマンス
- アプリケーションのバージョン管理
- エラー処理と耐障害性
前提条件
Prerequisites
Prismは、あなたが、WPFを実際に経験していることを前提としています。Prismが、大量に使用するいくつかの重要な概念があります。 そして、あなたは、それらに慣れる必要があります。それらは、次のものを含みます:
- XAML(Extensible Application Markup Language)
WPFアプリケーションでは、言語は、宣言的に定義され、そして、ユーザー・インターフェイスを初期化します。
- データ結合
これは、WPFで、どのように、UI要素が、構成要素とデータに接続されるかです。
- リソース
これらは、WPFで、スタイル、データテンプレートとコントロール・テンプレートが、どのように、作成され、管理されるかです。
- コマンド
これらは、ユーザー・ジェスチャーと入力が、どのように、コントロールに接続されるかです。
- ユーザー・コントロール
これらは、ユーザー定義した動作やユーザー定義した外観を提供する構成要素です。
- 依存関係プロパティ
これらは、設定するプロパティ・システムを有効にするために、共通言語ランタイム(CLR)を拡張します。 そして、データ結合、コマンドとイベントのルーティングのサポートの監視をします。
- 動作
動作は、簡単に、ユーザー・インターフェイスで、コントロールに適用することができる、双方向機能をカプセル化するオブジェクトです。
Prismの概要
An Overview of Prism
構造的なゴール
Architectural Goals
手引きは、設計者と開発者が、次の目的を達成するのを助けるために設計されています。:
- WPFを使用する、独立チームによって、構築され、組み立てられ、そして、必要に応じて配布されるモジュールから、アプリケーションを作成します。
- ユーザー・インターフェイス(UI)設計、ビジネス・ロジック実装、基盤構造コード開発のような、横断して結びつける依存関係を最小にし、 いろいろな分野で、専門化するために、結びつけることができます。
- 独立したチーム全体で、再利用性を促進する、アーキテクチャを使用します。
- 共通のサービスを抽象化することによって、すべてのチームが利用できる、アプリケーションの品質を増加させます。
- 段階的に統合された新しい機能。
Prismの設計目標
Prism Design Goals
Prismは、あなたが、柔軟で、保守するのが簡単なWPFアプリケーションを、高機能な設計・構築するのを助けるために、設計されました。 Prismライブラリは、デザインパターンを実装しています。重要な構造的な設計原理を実現しています。 分離の重要性と疎結合のような、Prismライブラリで提供されるデザインパターンや能力を使用して、 あなたは、疎く結合した構成要素を使用しているアプリケーションを設計し、構築することができます。 それは、独立して進化することができます。 しかし、それは、全体的なアプリケーションに、簡単に、継ぎ目なく、統合することができます。
Prismは、関係と疎結合の分離の中心的な構造的設計原理の周辺で設計されています。 これは、Prismが、次に含まれる、多くの利点を提供できます。:
- 再使用
- 拡張性
- 柔軟性
- チーム開発
- 品質
Prismは、複数のアプリケーションで、テストされ、 統合される、コンポーネントとサービスが、簡単に開発できことで、再使用を促進します。 再使用は、ユニットでテストされたコンポーネントの再使用を通して、実行時で、依存関係の注入に通して、 簡単に見つけ出し、そして、統合されることができる、コンポーネント・レベルで達成することができます。 そして、モジュールを用いることによりアプリケーション層で、それは、アプリケーション・レベルの機能をカプセル化します。 それは、アプリケーション全体で再利用することができます。
Prismは、アプリケーションを作成するのに役に立ちます。 それは、コンポーネント依存関係を管理することで、拡張することが簡単です。 コンポーネントは、より簡単に統合、あるいは、実行時に代わりの実装に置き換えることができます。 そして、それは、アプリケーションをモジュールに分解するための機能を提供することによって、独立して更新し、配布することができます。 また、Prismライブラリそれ自身のコンポーネントの多くは、拡張、あるいは、置き換えることができます。
新しい機能が開発され、統合されるように、より簡単に更新できることで、 Prismは、柔軟なアプリケーションを作成するのに役に立ちます。 また、Prismは、WPFアプリケーションを、共通のサービスとコンポーネントを使用して開発することができます。 アプリケーションは、最も適切な方法で、配布し、利用することができます。 また、それは、アプリケーションが、役割に基づいた異なる経験と構成を提供することができます。
Prismは、チーム開発を促進します。 別々のチームが開発することを可能にすることによって、そして、独立したアプリケーションの異なる部品さえ配備します。 Prismは、横断して結びつける依存関係を最小限にするのを助けます。そして、チームは、異なる機能分野でフォーカスできます。 (UIデザイン、ビジネス・ロジックの実装と基盤構造コード開発のような)、 あるいは、異なるビジネス・レベルの機能領域に、(profile、sales、inventoryやlogisticsのような)。
Prismは、アプリケーションの品質を向上することに役立ちます。 共通のサービスとコンポーネントを提供することによって、開発チームに、完全に、利用できるように、テストされ、作成されます。 加えて、共通のデザインパターンの完全にテストされた実装を提供することによって、そして、手引きは、それらを完全に活用するために必要です。 Prismは、開発チームが、基盤構造コードを実装して、テストする代わりに、アプリケーションの要件に重点を置くことができます。
Prismが設計されたことに、注目することは重要です。 それで、あなたは、それぞれ、または、一斉に、どんなPrismの能力とデザインパターンでも使用できます。 あなたの要件とあなたのアプリケーション筋書きに依存します。 Prismは、大きな構造変化を必要とせずに、段階的に採用されることができるように、設計され、 あなたが、特定のアプリケーションのために、意味がある、能力とデザインパターンを使用することができます。
最後に、ソフトウェアの検査は、最上の開発作業と考える必要があるため、 そして、しっかりと開発プロセスに組み込まれ、Prismは、ソフトウェア検査のさまざまな種類のために、 広範囲なサポートを提供しています。それによって、あなたは、テストするのが簡単なアプリケーションを設計・構築することができます。 Prismそれ自体は、テストすることを意識して開発されました。 これは、確実に、Microsoftセキュリティ基準を満たすために、複数の厳しい品質のゲートを満たすために開発されました。 そして、それは、複数のオペレーティング・システムとVisual Studioの複数のバージョン、そして、複数の開発言語上で正しく機能します。 単体テストは、各々のチェックインの後に、実行されました。 加えて、Prismライブラリは、次に示す表で一覧に示されるように、複数の追加された品質のゲートに対してテストされました。
Test | Description |
合格判定試験 | 試験要件を駆動するために、ユーザーの筋書きを使用して、アプリケーション機能を確認します。 テストは、手で実行したり、自動することができます。 |
アプリケーションの構築演習 | チーム・メンバーは、配布可能なソフトウェアを利用しているアプリケーションを構築します。 |
ブラックボックステスト | 手動の受け入れテストは、ユーザーの視点から実行します。 |
クロスプラットフォーム・テスト | すべての自動化されたテストは、複数のプラットホーム上で実行されます。 |
グローバリゼーションテスト | すべての自動化されたテストは、複数の開発言語上で実行されます。 |
性能テスト | 不十分な負荷で、システムの速く特定の測面が、どのように、実行するかを測定します。 |
セキュリティ検査 | 内部のMicrosoftセキュリティ監査基準は、スレッド・モデルを取り扱います。 セキュリティ分析ツールをとおして、攻撃要因を識別し、コードを実行します。 |
ストレス試験 | 極端な負荷の下で、システムの安定度を測定します;特に、特にメモリリークとスレッディングのような問題を追い出すために、探します。 |
ホワイトボックス法 | 徹底的に、ソースコードは、コーディング基準、構造、そして、それは、アーキテクチャ全体に、どのように、マッピングするかを検証します。 |
Prismライブラリのソースコードには、次の表に示すように、ユニットとUIのオートメーション・テストが含まれています。 あなたは、教育資源として、これらを使用することができます。あるいは、あなたは、Prismライブラリそれ自身に対して、テストを実行することができます。 これは、Prismライブラリの修正版を、Prismのチームとして同じような品質のゲートを使用して、カスタマイズ、再コンパイル、テスト、配布することができます。
Test | Description |
UI自動化テスト | 受け入れテストの限られた範囲;ユーザーの観点からアプリケーションを駆動します。 |
単体テスト | クラスの実装を検証します |
Prismの主要な概念
Prism Key Concepts
Prismは、あなたが、よく知らないかもしれない、機能とデザインパターンを提供します。 特に、あなたが、デザインパターンと複合アプリケーション開発に不慣れな場合、 この項目は、Prismの背後にある、中心となる概念の概要を簡単に提供します。 そして、用語の一部を定義します。あなたが、ドキュメンテーションとコードを通して使用するのを見るでしょう。
- モジュール
- モジュールのカタログ
- シェル
- View
- View Model
- Model
- コマンド
- Region
- ナビゲーション
- EventAggregator
- 依存関係注入コンテナ
- サービス
- コントローラ
- ブートストラッパー
モジュールは、必要に応じて、独立して開発、テスト、配布することができる、機能のパッケージです。 多くの状況では、モジュールは、別々のチームにより、開発され、保守されます。 典型的な、Prismアプリケーションは、複数のモジュールから構築されます。 モジュールは、特定のビジネスに関連する機能を表すために、使用することができます。 (例えば、プロファイル管理)、そして、その機能を実装するために、すべてのビュー、サービス、そして、必要とされるデータモデルをカプセル化します。 また、モジュールは、共通のアプリケーション基盤構造やサービスをカプセル化するために、使用することができます。 (例えば、ログの記録と例外管理サービス)それは、複数のアプリケーションにわたって、再利用することができます。
複合アプリケーションでは、モジュールは、ホスト・アプリケーションで、実行時に見つけ、読み込まれる必要があります。 Prismでは、モジュール・カタログは、読み込まれ、並べられるとき、読み込まれているモジュールを、指定するために使用されます。 モジュール・カタログは、ModuleManagerとModuleLoaderコンポーネントによって使用されます。 それは、モジュールをダウンロードするための役割を果たします。それらが、リモートの場合、モジュールを初期化するために、 アプリケーション・ドメインに、モジュールのアセンブリを読み込みます。Prismは、モジュール・カタログを、異なる方法で指定することができます。 コードを使用して、XAMLを宣言的に使用して、あるいは、設定ファイルを使用して、プログラムに組み込まれます。 また、あなたは、行う必要がある場合、ユーザー定義したモジュール・カタログを実装することができます。
シェルは、モジュールが読み込まれている、ホスト・アプリケーションです。 シェルは、アプリケーションの全体のレイアウトと構造を定義しますが、それは、一般的に、それをこれから格納する、 正確なモジュールを知りません。これは、通常、共通のアプリケーション・サービスと基盤構造を実装しますが、 ほとんどのアプリケーションの機能と内容は、モジュールの内に実装されます。 また、シェルは、最上位のウィンドーや視覚的な要素を提供します。 それは、続いて、ロード済みモジュールに提供される、異なるUIコンポーネントを格納するでしょう。
ビューは、特定の機能のためのUIやアプリケーションの機能分野をカプセル化するUIコントロールです。 ビューは、MVVMパターンと一緒に使用されます。それは、UIとアプリケーションのプレゼンテーション・ロジックとデータの間で、 懸念事項を明確に分離するために使用されます。ビューは、UIをカプセル化するために使用され、ユーザーとの対話処理動作を定義します。 それによって、ビューは、独立して、根底にあるアプリケーションの機能を、更新し、置き換えることができます。 ビューは、View Modelクラスと相互作用するために、データ結合を使用します。
View modelは、アプリケーションのプレゼンテーション・ロジックと状態をカプセル化するクラスです。 それらは、MVVMパターンの一部です。 View modelは、アプリケーションの機能の多くをカプセル化します..View modelは、ビュー内のコントロールに、 データ結合することができる、プロパティ、コマンドとイベントを定義します。
Modelクラスは、アプリケーションデータとビジネス・ロジックをカプセル化します。 それらは、MVVMパターンの一部として、使用されます。Modelは、データの整合性と完全性を確実とするために、 データと関連する妥当性検証とビジネス・ルールをカプセル化します。
コマンドは、いくつか、アプリケーションの機能をカプセル化するために、使用されます。 それは、それらを、定義し、アプリケーションのUIを独立してテストすることができます。 それらは、コマンド・オブジェクトとして、あるいは、View Modelのコマンド・メソッドとして定義できます。 Prismは、DelegateCommandクラスとCompositeCommandクラスを提供します。 後者は、互いにすべての呼び出されたコマンドの、コレクションを示すために使用されます。
Regionは、アプリケーションのUIの範囲内で定義する、論理的なプレースホルダです。 (シェルやビューの中で)中に、そのビューが表示されます。Regionは、アプリケーション・ロジックに変更を必要とすることなく、 アプリケーションのUIの配置を更新できます。多くの共通のコントロールは、Regionとして使用されることができます。ビューは、 ContentControl、ItemsControl、ListBox、TabControlような、コントロール内に、自動的に表示できます。 ビューは、プログラム上で、または、自動的に、Regionの範囲内で表示されることができます。また、Prismは、 Regionでナビゲーションを実装するためのサポートを提供します。Regionは、RegionManagerコンポーネントを通して、他のコンポーネントに配置できます。 それは、特定のRegion内のビューのディスプレイを調整するために、RegionAdapterとegionBehaviorコンポーネントを使用します。
アプリケーションが、そのUIに変更を調整するプロセスとして、ナビゲーションは定義されます。 アプリケーションのユーザー相互作用、あるいは、内部のアプリケーションの状態の変更の結果を示します。 Prismは、ナビゲーションの2つのスタイルをサポートします。:すでに存在するビューの状態が、 単純なナビゲーションの筋書きで、実装するために、更新される状態に基づいたナビゲーション、 そして、アプリケーションUI内で、新しいビューが作成された、あるいは、古いビューが置き換えられた場所で表示を切り替えるナビゲーション。 ビュー切り替えナビゲーションは、柔軟なナビゲーション方式を実装するために、 PrismのRegionとともに統一リソース識別子(URI)に基づいたナビゲーション機構を使用します。
複合アプリケーションのコンポーネントは、多くの場合、疎く結合する方法でアプリケーションの他のコンポーネント、 そして、サービスと通信する必要があります。これに対応するために、Prismは、pub-subイベント機構を実装する、 EventAggregatorコンポーネントを提供します。それによって、コンポーネントは、それらの他への参照のどちらも必要とせずに、 イベントを公開でき、他のコンポーネントにそれらのイベントを追加します。EventAggregatorは、 多くの場合、互いに通信するために、異なるモジュールのコンポーネントを定義するために使用されます。
依存関係注入(DI)パターンは、管理されるコンポーネントの間で、依存関係を可能にするために、 Prismを通して使用されます。依存関係注入は、実行時に、コンポーネントに依存関係を実現することができます。 そして、それは、拡張性とテスト容易性をサポートします。 Prismは、UnityやMEF、あるいは、ServiceLocatorを経由して、 他の依存関係注入コンテナと一緒に動作するように設計されています。
サービスは、UIに関連していない機能をカプセル化するコンポーネントです。 ログの記録、例外管理とデータアクセスのような、サービスは、アプリケーションによって、または、モジュール内で定義することができます。 サービスは、多くの場合、依存関係注入コンテナで登録されます。それで、それらに依存する、 他のコンポーネントによって、必要、そして、使用されるように、それらは、配置、あるいは、構築できます。
コントローラは、アプリケーションUI内のRegionで表示される、 ビューの構築と初期化を調整するために使用されるクラスです。 コントローラは、どのビューが表示されるか決定する、プレゼンテーション・ロジックをカプセル化します。 コントローラは、構築を調整するため、そして、Region内のビューの配置に、拡張可能なURIに基づくナビゲーション機構を提供する、 Prismのビュー切替ナビゲーション機構を使用するでしょう。 アプリケーションのよりコントロールのパターンは、この責任にマッピングする抽象概念を定義します。
ブートストラッパー・コンポーネントは、さまざまなPrismのコンポーネントとサービスを初期化するために、 アプリケーションによって、使用されます。それは、それで、どんなアプリケーション・レベルのコンポーネントとサービスでも登録するために、 依存関係注入コンテナを初期化するために、使用されます。また、それは、モジュール・カタログを構成し、 シェルのViewとView Modelやプレゼンターを初期化するために、使用されます。
Prismは、あなたが、個別に、あるいは、すべて、一緒に、前述の機能とデザインパターンを使用することができるように、 設計されています。あなたの要件とあなたのアプリケーション筋書きに依存します。あなたは、それら、すべてを採用することなく、 どんな組合せでも、MVVMパターン、モジュラー性、Region、コマンドやイベントを使用することができます。もちろん、 あなたが、利益を最大限に活用したい場合、それは、分離の重要性と疎結合を提供します。 あなたは、一般的に、多くのPrismの機能、そして、互いと連携したデザインパターンを使用するでしょう。 次の図は、代表的な、Prismアプリケーション・アーキテクチャを示しています。 そして、Prismのすべてのさまざまな能力が、複数のモジュールが複合したアプリケーションの内で、どのように、互いに動作するかを示します。
Prismライブラリによる代表的な複合アプリケーション・アーキテクチャ
Typical composite application architecture with the Prism Library
ほとんどのPrismアプリケーションは、最上位のビューを表示するためのRegionと共有サービスを定義する、 読み込み済みのモジュールで、アクセスされることができる、シェル・アプリケーションから構成されています。 シェルは、適切なように、モジュールが、起動時に、指定するために、読み込まれることになっている適当なカタログを定義します。 また、依存関係注入コンテナが、定義されます。それは、実行時に、コンポーネントの依存関係を実現することができます。 共有サービスとコンポーネントは、アプリケーションが開始するブートストラッパーで、コンテナに登録されます。
個別のモジュールは、MVVM、定義されたビュー、View Model、モデルとサービス・コンポーネントのような、 全体的なアプリケーションの機能の一部と切り離されたプレゼンテーション・パターンを使用して、カプセル化します。 モジュールが読み込まれるとき、モジュール内で定義されたビューは、シェルで定義されるRegion内で表示されます。 初期化が完了した後、ユーザーは、続いて、状態に基づいたもの、あるいは、視覚的な更新を調整するビュー切り替えナビゲーション、 あるいは、アプリケーションのRegion内の新しいビューの表示を使用して、アプリケーション内で操作します。
Prismを使用する
Using Prism
今、あなたは、Prismがサポートする主要な機能とデザインパターンを見てきました。 あなたが、新しいアプリケーションを開発するとき、どれくらい簡単に、Prismを使用し始めることができるかについて、見る時間です。 この項目では、基本的なPrismアプリケーションを作成するために要求される、最初のいくつかの手順の概要を提供します。 あなたは、追加の機能を活用するために、この基本的なアプリケーションを拡張することができます。 そして、あなたの筋書きで必要とされるように、デザインパターンは、Prismによって、提供されます。
備考
Prismライブラリは、簡単に、新しい複数の要素で構成されたWPFアプリケーションを構築するために、使用できますが、 また、あなたは、それを、あるいは、もっと、Prismの機能やデザインパターンを利用したい既存のアプリケーションに、Prismを使用することができます。
一般的に、Prismアプリケーションは、シェル・プロジェクトと複数のモジュール・プロジェクトから構成されています。 次の図は、Prismライブラリを使用する複合アプリケーションを開発するとき、必要な共通の活動を示しています。
複合アプリケーションを作成するための動作
Activities for creating a composite application
代表的なPrismアプリケーションは、Prismの機能の大部分、あるいは、すべてを活用します。 そして、デザインパターンは、早い段階で、疎結合の利益、そして、構造的な設計の関係の分離を完全に認識することができるように、記述されます。 しかしながら、この使用例のため、手順は、一つのモジュールから構成される、基本的なPrismアプリケーションを作成する必要があります。 それは、1つのビューの定義が説明されています。
備考
Prismライブラリの参照
あなたのプロジェクトのほとんどは、Prismライブラリ・アセンブリを参照する必要があるでしょう。 Prismは、NuGetパッケージを通じて、署名したバイナリを提供します。 それで、あなたは、それらに参照を追加するために、Visual Studio NuGetパッケージ管理ダイアログボックスを使用することができます。 また、あなたは、あなたのソリューションに、Prismライブラリ・プロジェクトを含めることができ、そして、それらにプロジェクト参照を使用します。 後者は、Prism型に、段階的に下げるために、Go To Definition(定義に移動)のような、機能を使用できる利点を持っています。 あなた独自の厳密な名前、あるいは、あなたのビルド・プロセスの一部の証明書で、Prismライブラリ・アセンブリを構築し、署名できるだけでなく。
シェルを定義する
アプリケーション・シェルは、アプリケーションのための基本的なレイアウトを提供します。このレイアウトは、 Regionを使用して、ビューを配置するために、使用できるモジュールが、定義されています。 次の図に示すように、シェルのようなビューは、内容が追加できる発見可能な領域を定義するために、 Regionを使用することができます。シェルは、一般的に、アプリケーション全体のための外観を設定し、 そして、アプリケーションを通して使用されるスタイルが含まれています。
シェル、ビューと領域
Shells, views, and regions
ブートストラッパーを作成する
Create the Bootstrapper
ブートストラッパーは、アプリケーションをPrismライブラリ・サービス、そして、UnityやMEFコンテナと結合する接着剤です。 それぞれのアプリケーションは、一般的に、UnityBootstrapperやMefBootstrapperのどちらからでも継承する、 アプリケーション固有のブートストラッパーを作成します。次の図に示すように、 あなたは、モジュール・カタログを取り付けるために、使用したい方法を決定する必要があるでしょう。 最小限、それぞれのアプリケーションは、モジュール・カタログとシェルを提供するでしょう。
既定では、ブートストラッパーは、.NET Framework Traceクラスを使用して、イベントを記録します。 ほとんどのアプリケーションは、企業ライブラリ・ログの記録のような、それら独自のログの記録サービスを提供することを、望むでしょう。 アプリケーションは、それらのブートストラッパーで、それらのログの記録サービスを提供することができます。
既定では、UnityBootstrapperとMefBootstrapperは、Prismライブラリ・サービスを有効にします。 これらは、あなたのアプリケーション固有のブートストラッパーで、無効にしたり、置き換えたりすることができます。
図表は、Prismライブラリへの結合を説明します。
モジュールの作成
Create the Module
モジュールには、特定のアプリケーションの機能の一部に、ビューとサービスが含まれています。 しばしば、これらは、別々のアセンブリにおいて、含まれ、別々のチームによって開発されます。 IModuleインターフェースを実装するクラスによって、モジュールは表されます。これらのモジュールは、 初期化の間、それらのビューとサービスを登録し、シェルに、複数のビューを追加することもできます。 あなたのモジュール発見アプローチに応じて、あなたは、あなたのモジュール・クラスに、属性を適用することを必要とするかもしれません。 あるいは、あなたのモジュールの間で依存関係を定義します。
シェルに、モジュール・ビューを追加する
Add a Module View to the Shell
モジュールは、内容を配置するために、シェルの領域を利用します。 初期化の間、モジュールは、シェルの中や追加されたものの中に、領域を配置するために、 RegionManagerを使用します。あるいは、これらの領域に、より複数のビュー、 あるいは、それらの領域の中で作成される、複数のビュー型を登録します。 RegionManagerは、アプリケーション、そして、ブートストラッパーから、 初期化された中心的なサービスを通して、領域の履歴を維持するための、役割を果たします。
Prismを調べる
Exploring Prism
Prismは、次のものから構成されています。:
- Prismライブラリのソースコード(原文リンク)
- Prismのバイナリ・アセンブリ(原文リンク)
UnityとMEF拡張を加えて、Prismライブラリ・アセンブリのための中心的なPrismの機能が、 含まれているソースコード、それは、「Unity Applicationブロック(Unity)」(原文リンク)と 「Managed Extensibility Framework」(原文リンク)でPrismを使用するための、追加されたコンポーネントを提供します。 また、ソースコードには、Prism.PubSubEventsとPrism.Mvvmアセンブリが含まれています。
Prismライブラリ・アセンブリの署名されたバイナリ・バージョン。 これらのアセンブリは、Prism、Prism.Composition、Prism.PubSubEventsとPrism.Mvvm、Prism.Interactivity、 rism.UnityExtensionsとPrism.MefExtensionsを検索することによって、NuGetからダウンロードすることができます。 これらのNuGetパッケージは、「Unity Applicationブロック」(原文リンク)とサービス・ロケーター(原文リンク)のような、依存関係を読み込みます。
備考
PrismのNuGetパッケージは、Prism.Composition、Prism.PubSubEvents、 Prism.Mvvm、Prism.Interactivity、Prism.PubSubEventsとPrism.Mvvm NuGetパッケージをダウンロードするでしょう。
- コード・サンプル
- ドキュメンテーション
Prismには、参考になる実装サンプルとクイックスタート・サンプルが含まれています。 株トレーダーの参考になる実装は、包括的なサンプル・アプリケーションです。 それは、Prismが、実際のアプリケーションの筋書きを実装するために、どのように使用しているか説明します。 参考になる実装は、意図的に不完全ですが、それらは、どのように、Prismのパターンの多くが、単一のアプリケーションの内で、互いに動作することができるか説明します。 QuickStartサンプルは、いくつかの小ささに重点を置いたサンプル・アプリケーションが含まれています。 それは、MVVMパターン、ナビゲーション、UIの構成、モジュラー性、命令、イベント集約とインタラクティブ性を説明します。
Prism 5.0ドキュメンテーションは、Prismの背後にある、目標と概念の概要、 そして、それぞれの機能を使用するための詳細な手引きを説明します。 そして、デザインパターンは、Prismによって、提供されます。次の項目は、取り扱われている話題の概要を提供します。
ドキュメンテーションを調べる(原文リンク)
Exploring the Documentation
Prismのドキュメンテーションは、広範囲の話題にわたっています。一般的な開発の難問の概要と複合アプリケーションのアプローチ、 Prismライブラリの概要とそれが実装するデザインパターン、ならびに、開発中に、Prismライブラリを使用するための、 ステップ毎の説明が含まれています。ドキュメンテーションは、読者が理解するのを助けるために、幅広い技術的な読者に気に入ってもらうことを目的としています。 そして、それら独自のアプリケーションの中で、Prismを使用します。ドキュメンテーションは、次のものが含まれています。:
- Applicationを初期化する
- コンポーネント間で依存関係を管理する
- モジュール・アプリケーション開発
- MVVMパターンを実装する
- 高度なMVVMの使い方
- ユーザー・インターフェイスを構築する
- ナビゲーション
- 疎く結合したコンポーネント間の通信
- Applicationを配布する
- 用語集
- Prismライブラリのパターン
- Prismライブラリ
- Prismライブラリ4.1からのアップグレード
- Prismライブラリを拡張する(原文リンク)
- コード・サンプル
- Prism Library Hands-on-Labを使用してみましょう
- PrismライブラリHands-on Labを使用して、アプリケーションの公開と更新をします。(原文リンク)
この項目は、モジュールPrismアプリケーションを起動し駆動するために、何を発生する必要があるか説明します。
Prismライブラリに配置されるアプリケーションは、依存関係注入コンテナに依存しています。 Prismは、ほぼ、どんな依存関係注入コンテナでも、動作するための機能を持っていますが、 Prismライブラリは、依存関係注入コンテナのために、2つの省略時の選択肢を提供します。: UnityやMEF。この項目では、異なる機能、そして、あなたが、依存関係注入コンテナで作業する場合、 考える必要があるものについて説明します。
この項目では、中心的な概念、重要な決定、 そして、あなたが、Prismで、モジュール・クライアント・アプリケーションを作成するとき、 中心となる筋書きについて説明します。
MVVMパターンを使用して、あなたは、3つの分離したクラスに、 あなたのアプリケーションUIを根底にあるプレゼンテーションとビジネス・ロジックと切り離します。:View、ModelとView Model、この項目では、MVVMパターンの背後にある、中心的な概念について説明し、 そして、あなたのアプリケーションに、Prismを使用して、どのように、それを実装するか、記述します。
この項目では、MVVMパターンを使用して、より高度な筋書きを実装することに関する手引きを提供します。 複数の要素で構成されたコマンド(グループのコマンドを表すコマンド)を、どのように実装するか、 そして、どのように、非同期Webサービスとユーザー対話を操作するかが含まれています。 また、この項目では、UnityやMEFのような、構築とMVVMクラスの接続を操作するために、 依存関係注入コンテナを使用することに関する手引きを提供します。
領域は、開発者が指定できる、プレースホルダです。ビューがアプリケーションUIで表示される場所で、 Prismでは、領域のビューを表示するための、2つの方法があります。:ビュー発見とビュー注入。この項目は、領域とUIで、どのように、動作するかを説明します。 また、それには、複合アプリケーションを理解するための、UIのデザイナーのための情報が含まれています。
ナビゲーションは、アプリケーションが、アプリケーションとユーザーの相互作用、 あるいは、内部アプリケーションの状態変化の結果として、そのUIに変更を調整するプロセスです。 この項目では、ビューのUIの状態が、ナビゲーションを反映するために更新される、そして、表示を切り替えるナビゲーションで、 新しいビューが作成され、領域に表示される所で、状態に基づいたナビゲーションを実装するための手引きを提供します。
この項目では、命令、EventAggregator、領域のコンテクストと共有サービスを使用して、 異なるモジュールのコンポーネントの間で通信するための、さまざまなオプションについて説明します。
この項目は、PrismのWPFアプリケーションのための配布上の注意事項に対処します。
この付録は、Prismにより提供される用語、概念、デザインパターンと機能の簡潔な概要を提供します。
この付録は、Prismライブラリと株トレーダーRIで適用されるソフトウェア設計パターンを説明します。 この項目は、主に、複合アプリケーションを構築する際の難問に対処するために、 使用されるパターンそれら自身を習熟したいと望んでいる設計者と開発者を対象としています。
この付録は、WPFのためのPrismライブラリの概要を提供します。
この付録は、あなたが、Prismの以前のバージョンからアップグレードしている場合、あなたが知る必要があるものについて説明します。
この付録は、どのように、あなたが、Prismのモジュラー性、動作とナビゲーションを拡張することができるか議論します。
Prismには、重要な概念を説明する、複数のサンプルのためのソースコードが含まれています。 詳細については、次の項目「WPFのためのPrismライブラリを使用しているコード・サンプル。」を参照してください。
このhands-on labは、ステップ・バイ・ステップで、WPFで単純な複合アプリケーションを構築することを説明します。 それは、主に、Prismライブラリの基本的な概念を理解したい開発者を対象としています。
このhands-on labでは、あなたに、ClickOnceで、 PrismのWPFアプリケーションを公開して、更新するプロセスを説明します。
コード・サンプルを調べる
Exploring the Code Samples
コード・サンプルは、特定のPrismに関連する概念を説明します。あなたが、重要な概念を理解したい場合、 サンプルは、理想的な出発点です。そして、あなたは、ソースコードを調べることによって、 新しい技術を快適に学んでいきます。Prismは、次のものが含まれています。:
- 株トレーダーの参考になる実装
- モジュール方式のクイックスタート
- インタラクティブ性のクイックスタート
- MVVMクイックスタート
- 命令のクイックスタート
- UI構成のクイックスタート
- 状態に基づいたナビゲーションのクイックスタート
- 表示を切り替えるナビゲーションのクイックスタート
- イベント集約のクイックスタート
株トレーダーRIは、複合アプリケーションです。それは、Prismライブラリを使用して、基本的なアーキテクチャの実装を説明します。
これらのクイックスタートは、モジュールで構成されるWPFアプリケーションをどのように、構築するかを説明します。 シェルに、モジュールのアセンブリへの参照が含まれている、あるいは、動的に、読み込まれているとき、 モジュールが、実行時に、動的に検出され、読み込まれるとき、モジュールは、静的に読み込むことができます。 また、クイックスタートは、UnityコンテナとMEFを使用して、説明します。
このクイックスタートは、ViewとView Modelの互いの連携を、どのように作成するかを説明します。 View Modelが、ユーザーと相互作用する必要があるとき、あるいは、ユーザー・ジェスチャーは、コマンドを呼び出すイベントを呼び出す必要があります。 View Modelの、これら各々の筋書きには、Viewを知っている必要はありません。 InteractionRequestsとInteractionRequestTriggersを使用して、最初の筋書きが、処理されます。 2つ目の筋書きは、InvokeCommandActionによって処理されます。
妥当性検証、UIの相互作用とデータテンプレートのような、開発者が直面する、 より一般的な難問のいくつかを示す、このクイックスタートは、MVVMプレゼンテーション・パターンを実装し、 どのように、アプリケーションを構築するかを説明します。
このクイックスタートは、Prism.Mvvmライブラリで、分離された方法で、UIの動作を処理するために、 提供されるコマンドを使用するWPFのUIを、どのように構築するかを説明します。
このクイックスタートは、異なるビューで構成されるWPFのUIを、どのように構築するかを説明します。 それは、動的に領域にロードされます。そして、それは、切り離された形で互いに対話します。 それは、両方のビューの検出、そして、UIの構成のための、ビュー注入の方法、を、どのように使用するかを説明します。
このクイックスタートは、単純な、アプリケーションのナビゲーションを定義するための方法を説明します。 このクイックスタート内の使用されるアプローチは、異なる状態を定義するために、WPFの表示状態マネージャー(VSM)を使用します。 アプリケーションは、状態の間に、状態と遷移のためのアニメーションを持っており、そして、定義します。
このクイックスタートは、Prismの地域ナビゲーションAPIを、どのように使用するかを説明します。 クイックスタートは、領域で、ビューを操作することが含まれている、もう一つのビュー(入れ子にされたナビゲーション)に含まれている領域のビューを操作する、 ナビゲーションジャーナルのサポート、ジャスト・イン・タイム・ビューの作成、ビューに移動するとき、文脈上の情報を渡します。 ナビゲーションに関与しているViewとView Model、 そして、モジュール方式とUIの構成を通してビルドされるアプリケーションの部品として、 ナビゲーションを利用する、複数のナビゲーションの筋書きを示します。
このクイックスタートは、Event Aggregatorサービスを使用するWPFアプリケーションを、 どのように、構築するかを説明します。このサービスは、あなたが、アプリケーションにおいてコンポーネントの間で疎く結合した通信を確立することができます。
詳細情報
Prismは、あなたが、WPFを実際に経験していることを前提としています。 あなたが、WPFについての全般的な情報を必要とする場合、次のリソースを参照してください。:
- Windows Presentation Foundation on MSDN.
- MacDonald, Matthew. Pro WPF in C# 2010: Windows Presentation Foundation in .NET 4, Apress, 2010.
- Nathan, Adam. WPF 4 Unleashed. Sams Publishing, 2010.
書籍の画像は、販売サイトにリンクさせています。
書籍の画像は、販売サイトにリンクさせています。
関連書籍
書籍販売サイトにリンクさせています。
コミュニティ
Prismのコミュニティの場所は以下の通りです:
- Prism: http://www.codeplex.com/Prism
- PubSubEvents (Event Aggregator): http://www.codeplex.com/pnpPubSub
- MVVM (Model-View-ViewModel): http://www.codeplex.com/pnpMvvm
これらのコミュニティサイトでは、あなたは、質問を投稿、フィードバックを提供、他のユーザーとアイデアを共有し結合することができます。 また、コミュニティ・メンバーは、拡張とトレーニング資材のような、Microsoftの計画、将来提供されるテスト、追加された内容をダウンロードすることを助けることができます。