8

免責事項:プリズム初心者。私は失われた時間を埋め合わせるために猛烈に読んでいます:)

コンテキスト:Prismを使用して構築されたWPFアプリケーションの自動受け入れテストを作成する必要があります。

問題:バッキングViewModelと、UIなしで必要なすべてのものを作成しようとすると複雑になります。

ここで間違っているかもしれません...Prismを使用すると、名前付きプレースホルダー(リージョン)でシェルをマークアップできます。異なるモジュール(分離されたユニット)は、それらのビューを対応するRegionNamesに登録します。ビューは、MEF / Unityを介して注入されるViewModel(ctorインジェクション)にも依存します。

  1. ビューを表示しています
  2. 子ビューの作成をトリガーします(regionName =>ビューレジストリ)
  3. 子ビューモデルの作成をトリガーします(Mef ctorインジェクション)。

したがって、アプリの作成はPrism(またはより重要なのはView)に委任されます。これは、ビューファーストのアプローチのようです。これにより、UIを使用せずにアプリを起動するための作業にスパナがスローされます。UIでのテストは面倒です。

私が探しているのは、UIなしでオブジェクト全体(ViewModelと依存関係)グラフを構成するプレゼンターファーストアプローチです。

var viewModel = Someone.ComposeAndGet<ShellViewModel>();

Prism4でアプリを別の方法で作成することは可能ですか、それともサポートされていませんか?

[更新:2011年12月]
http://compositewpf.codeplex.com/discussions/283065
プリズムフォーラムに投稿して光を当てます。それは不可能のようです。受け入れテストにはUIテストを使用することをお勧めします。PrismはUIを構成します; それにより、ビューに決定的な依存関係があります。

4

2 に答える 2

3

私はPrismフレームワークが好きですが、Prismのリージョンを使用することはめったにありません。これは、Prismがビューファーストアプローチを強いられると感じているためです。

View-Firstを使用するのは嫌いです。レイヤーを分離しておく、単体テストなど、MVVMデザインパターンを使用する利点の一部が失われると感じているからです。ビューがViewModelの作成を担当している場合、ViewModelをテストするには、ViewModelを作成するためにViewを作成するか、ViewModelを手動で作成する必要があります。

また、理想的なMVVMアプリケーションでは、コマンドラインを含め、任意のUIでアプリケーションを実行できるはずです。リージョンを使用することで、ViewModelをPrismインターフェイスに制限しています。

時々Prismのリージョンを使用しますが、通常はスタートアップページ(TitleBarRegion、MenuRegion、ContentRegionなど)にのみ使用します。

于 2011-12-05T15:06:43.807 に答える
1

質問を完全に理解しているわけではありませんが、プリズムアプリをユニットテストするには:

ServiceLocatorを使用してViewModelsを取得できます。

MainViewModel mainVM = ServiceLocator.Current.GetInstance<MainViewModel>(); //That will "compose and get"

そして、あなたはそれを好きなようにユニットテストすることができます。

とは言うものの、PrismとMVVMは一般的に、ほとんどの責任をVMに委任します。ビューはデータの単なる表現であり、ロジックはありません。
VMはデータ/ロジックを保持し、実際にどのビューにバインドされているかを知らなくても、データ/ロジックに変更を加えます。

これがお役に立てば幸いです=)

于 2011-12-05T09:55:57.757 に答える