ホーム > コンピュータ > C# > WPF in C# > Prism

ベクトルドロー・レベルゼロ+

Prism Library 5.0 for WPFを使用したモジュール・アプリケーション開発 02[C# WPF Prism]

概要

MVVMパターン調べていて、Prismというツールキットを見つけました。MVVMパターンを使用するためのもっとも人気のあるツールキットのようです。

原文

Modular Application Development Using Prism Library 5.0 for WPF」(外部サイト)の和訳です。

訳文

Modular Application Development Using Prism Library 5.0 for WPF(外部サイト)

パターンと実践 ディベロパー・センター

Microsoft Prism Library 5.0 for WPFの開発者のガイドから:

重要な決定事項

Key Decisions

あなたが、行うと思われる最初の決定は、あなたが、モジュール・ソリューションを開発したいかには、関係ありません。 先のセクションで説明された、モジュール・アプリケーションを構築することは、多くの利点がありますが、 あなたが、これらの利点を獲得するために必要な時間と労力に関係があります。 あなたが、モジュールの解決案を開発することに決める場合、考慮するいくつかのことがあります。:

  • あなたが、使用するフレームワークを決定します。
  • あなたは、Prism、MEFや他のフレームワークを使用する、あなた独自のモジュール型のフレームワークを作成することができます。

  • あなたのソリューションを、どのように系統化するかを決定します。
  • それぞれのモジュールの境界を定義するモジュラアーキテクチャの方法に含まれているアセンブリは、それぞれのモジュールの一部です。 アプリケーションが、どのように配布されるか、制御を終了することと同じように、あるいは、プラグインや拡張可能なアーキテクチャをサポートしたい場合、 あなたは、開発を容易にするために、モジュールを使用することに決めることができます。

  • あなたのモジュールを、どのように分割するかを決定します。
  • 例えば、機能分野、プロバイダー・モジュール、開発チームと配布要件によって、モジュールは、要件に基づいて、それぞれに分割することができます。

  • アプリケーションが、決定する中心となるサービスを、すべてのモジュールに提供するでしょう。
  • 1つの例は、中心となるサービスで、障害報告サービスや認証と認可サービスができるかもしれません。

  • あなたが、Prismを使用している場合、モジュール・カタログで、モジュールを登録するために、あなたが使用する方法を決定します。
  • WPFのために、あなたは、コード、XAML、設定ファイルや発見されているモジュール、ディスクのローカル・ディレクトリの中でモジュールを登録することができます。 あなたのモジュールの情報のやり取りと依存関係についての戦略を決定します。 モジュールは、互いに情報をやりとりする必要があるでしょう。そして、あなたは、モジュール間で依存関係を扱う必要があります。

  • あなたの依存関係注入コンテナを決定します。
  • 一般的に、モジュラーシステムは、疎結合とダイナミックローディングとモジュールの作成を提供するために、依存関係の注入、コントロールの反転やサービス・ロケーターを必要とします。 Prismは、UnityやMEFに基づくアプリケーションのために、Unity、MEFや他のコンテナ、そして、提供されるライブラリを使用して、選択を提供します。

  • アプリケーションの起動時間を最小にする
  • アプリケーションの起動時間を最小限にするために、モジュールの要求とバックグラウンドのダウンロードについて考えます。

  • 配布要件の決定
  • あなたは、あなたが、アプリケーションをどのように配布するか考える必要があります。

次の項目では、これらの決定のいくらかについて、内容を提供します。

あなたのApplicationをモジュールに分割する

Partition Your Application into Modules

あなたが、モジュール化の手法で、アプリケーションを開発するとき、あなたは、アプリケーションを、個別に開発、テスト、配布することができる、 別々のクライアント・モジュールに構築します。それぞれのモジュールは、あなたのアプリケーションの全体的な機能の一部をカプセル化するでしょう。 あなたが、作成する必要のある最初の設計上の決定の1つは、アプリケーションの機能をモジュールに、どのように、分割するか決定することです。

モジュールは、対となる関連する関係をカプセル化する必要があります。そして、対となる異なった責任を持ちます。 モジュールは、アプリケーションの垂直の一部や水平サービス層を示すことができます。大規模なアプリケーションは、両方の型のモジュールを持っているでしょう。

モジュールのカプセル化:垂直

垂直の一部のまわりで、モジュールとアプリケーションは、系統化されます。

モジュールのカプセル化:水平

水平層のまわりで、モジュールとアプリケーションは、系統化されます。 より大規模なアプリケーションは、モジュールを垂直の一部と水平層で系統化されるかもしれません。モジュールのいくつかの例には、次のものが含まれています。:

  • モジュールは、株トレーダーの参考になる実装のニュース・モジュールのような、(株トレーダーRI)特定のアプリケーションの機能が含まれています。
  • モジュールには、対となる関連した使用事例のための、購買、請求書や総勘定元帳を発行することのような、特定のサブシステムや機能が含まれています。
  • モジュールには、ログの記録、貯蔵と認可サービスやWebサービスのような、基盤構造サービスが含まれています。
  • モジュールには、他の内部システムに加えて、Siebel CRMとSAPのような、基幹業務(LOB)システムを呼び出すサービスが含まれています。

モジュールは、他のモジュールで、依存関係の最低限のまとまりを備えている必要があります。モジュールが、他のモジュールで依存関係を持っている場合、 それは、具体的な型の代わりに、共用ライブラリで定義されるインターフェースを使用して、あるいは、EventAggregatorイベント型を通じて、 他のモジュールと情報をやりとりするために、EventAggregatorを使用して、疎く結合している必要があります。

モジュール方式の目標は、このような方法で、機能と技術は追加され、除去されるように、柔軟で、保守しやすく、 安定なまま、アプリケーションを分割することです。これを達成する最も良い方法は、モジュールが、可能な限り独立する、 そして、可能な限り分離するように、うまく定義されたインターフェースを持ってる、あなたのアプリケーションを設計することです。

プロジェクトをモジュール化する比率を決定する

Determine Ratio of Projects to Modules

モジュールを作成して、パッケージ化するためのいくつかの方法があります。推薦される最も一般的な方法は、 モジュールにつき、一つのアセンブリを作成することです。これは論理モジュールを分離しておくのを助け、厳密なカプセル化を促進します。 あなたが、モジュールを配布する方法をパッケージ化することと同じように、また、それは、より簡単に、アセンブリについて話すための、モジュール境界として、作成します。 しかしながら、何も一つのアセンブリに複数のモジュールが含まれることを妨げません。そして、場合によっては、 これは、あなたのソリューションで、プロジェクトの数を最小限にするのを好まれるかもしれません。大規模なアプリケーションのため、10-50のモジュールを持つことは、珍しくありません。 それ自身のプロジェクトに、それぞれのモジュールを分離することは、ソリューションに、多くの複雑さを追加します。 そして、Visual Studioの処理能力を低下させることができます。あなたが、アセンブリ/Visual Studioプロジェクトことに、1つのモジュールにくっつける選択する場合、時には、 それは、モジュールやモジュールのまとまりを、これを管理する、それら独自のソリューションに分割する意味があります。

疎結合のために、依存関係注入を使用する

Use Dependency Injection for Loose Coupling

モジュールは、ホスト・アプリケーションで、あるいは、他のモジュールで、提供されるコンポーネントとサービスに依存するかもしれません。 Prismは、モジュール間で、それらが、正しい順序で、読み込まれて、初期化されるように、依存関係を登録する機能をサポートします。 また、Prismは、モジュールの初期化をサポートしています。それらが、アプリケーションに読み込まれるとき、モジュールの初期化の間、モジュールは、 それが必要とする追加されたコンポーネントとサービスに、参照を取り出すことができます。 そして、あるいは、どんなコンポーネントとサービスでも、登録します。それは、他のモジュールが利用できるように、それらを作成するために、含まれています。

例えば、依存関係注入コンテナやファクトリー・サービスを使用して、モジュールは、直接、具体的な型のインスタンスを生成しているディレクトリの代わりに、 外部インタフェースのインスタンスを取得するために、独立した仕組みを使用する必要があります。UnityやMEFのような依存関係注入コンテナは、 自動的にインターフェースのインスタンスと型を取得するために、型を提供します。 それは、依存関係注入を通す必要があります。Prismは、依存関係注入のモジュールを簡単にを使用するために、UnityとMEFを一緒に統合します。

次の図表は、操作の代表的な流れを示しています。モジュールが、読み込まれるとき、 それは、コンポーネントとサービスに、参照を取得する、あるいは、登録するために必要です。

操作の代表的な流れ

依存関係の注入の例

この例では、OrdersModuleアセンブリは、OrdersRepositoryクラスを定義します。(それは、他のビューとクラスと一緒に、命令機能を実装します)。 CustomerModuleアセンブリは、OrdersRepositoryに依存する、CustomersViewModelクラスを定義します。 一般的に、サービスによって公開されるインターフェースに基づいています。アプリケーションの起動と起動するプロセスは、次に示す手順が含まれています。:

  • ブートストラッパーは、モジュールの初期化行程を開始します。そして、モジュール・ローダーは、OrdersModuleを読み込んで、初期化します。
  • OrdersModuleの初期化では、それは、コンテナでOrdersRepositoryを登録します。
  • モジュール・ローダーは、続いて、CustomersModuleを読み込みます。モジュールを読み込む順序は、モジュール・メタデータ内の依存関係で指定することができます。
  • CustomersModuleは、コンテナを通して、それ解決することによって、CustomerViewModelのインスタンスを構築します。 CustomerViewModelは、OrdersRepository上で依存関係を持っています。(一般的に、そのインターフェースに基づいています)、 そして、コンストラクタやプロパティ注入を通して、それを示します。コンテナは、OrdersModuleによって登録される型で、View Modelの構築に基づいて、その依存関係を注入します。 最終結果は、それらのクラスの間の密結合なしで、CustomerViewModelからOrderRepositoryへのインターフェース参照です。

備考

OrderRespository(IOrderRepository)を露出させるために使用するインターフェースは、 別々の「共有サービス」アセンブリや「命令サービス」アセンブリに存在させることができます。それらのサービスを公開するために、サービス・インターフェースと要求される型だけが、含まれています。 この方法では、強い依存関係が、CustomersModuleとOrdersModuleの間にありません。

両方のモジュールが、依存関係注入コンテナで、暗黙的な依存関係を持っていることに注意してください。 この依存関係は、モジュール・ローダーで、モジュール構築の間に注入されます。

Copyright (C) 2011-2016 kukekko All Rights Reserved.
kukekko@gmail.com
ご連絡の際はアドレスの@は半角にしてください。 また、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません 」。
inserted by FC2 system