2

Prism と MEF/Unity を使用してかなり大規模なアプリケーションを開発するとき、私は常に、イベント、サービス、またはその両方を使用するかどうかを選択する必要があります。そして、何が最も使いやすいかを決めることはできません。私のアーキテクチャに何か問題があるのか​​もしれません (この決定は最初から行う必要がないため) が、何がわかりません。

典型的な例を次に示します。私のアプリケーションには、メイン ウィンドウと、モジュールまたはユーザー アクションによってオンデマンドで作成される多数のスレーブ ウィンドウがあります。アプリケーションは、コンテンツ自体がモジュールのどこかに作成されている間に、スレーブ ウィンドウのクロムの外観と動作を決定し、ウィンドウの配置などを記憶します。ウィンドウの非表示/表示/前面への移動につながるユーザー アクションも多数あります。これらすべてを実現するために、私は現在、CreateWindow/SetWindowState/.. イベントをリッスンする WindowManager サービスを用意しています。

これには次の利点があります。

  • これを使用するクラスは、IEventAggregator (他のイベントのためにほとんどの場合既に使用している) と、WindowManager 自体ではなく、WindowManager によって消費されるイベントについてのみ認識します。
  • ViewModel のようなクラスは、ウィンドウを直接扱いません。代わりに、タイトルまたは ID と、必要なものだけをカプセル化する小さなイベント クラスによってそれらを参照します。
  • テストでモックするためだけに、別の IWindowManager インターフェイスは必要ありません

そして引き出し:

  • WindowManager は完全にスタンドアロンで使用できますが、イベントをサブスクライブする必要があります。または、おそらくより良いのは、他のクラスがそれを処理する必要があることです。
  • モーダル ダイアログを表示するように拡張するのはややこしいことです。VM がダイアログを表示するイベントを発生させる場合、ダイアログが閉じられた後にのみ Publish 呼び出しが返されることが非常に重要です。
  • WindowManager はサービスとして利用でき、CompositionContainer にあります。とにかくそれを使用しないのはなぜですか?

サービスを直接使用すると、特典/引き出しがシフトするだけで、明確な勝者はないようです.

質問: どちらか一方を選択するためのガイダンス ルールとして何を使用しますか? それとも常にどちらか一方または両方を選択しますか? この決定を下さなければならない、アプリケーションの設計に特に問題があるのでしょうか?

4

1 に答える 1