16

私は混乱しています。多分あなたは私を助けることができます:)

私は CAG のガイダンスに従ってきましたが、MVP パターンが私にとって非常に自然であることがわかりました。UI 対応のモデル (例: INotifyPropertyChanged を実装) があるとします。プレゼンターを使用してこのモデルをビューにバインドし (プレゼンターはビューのインターフェイスを認識します)、コード ビハインドを可能な限り小さく保ち、バインディングのみを処理します (モデルおよびコマンド) プロパティ (またはメソッド) または ICommand を持たないコントロールのイベント。この場合は、すぐにプレゼンターに委任されます。

  1. しばらくして、MVVM パターンを発見しましたが、これまでのところ、私にはわかりません。私のアプローチでわかる限り、モデルが UI 対応でない場合にのみ MVVM を使用します。しかし、プレゼンターを維持して新しいモデルを使用する方が合理的でしょうか?私はこの種の使用法で何を失うのか理解できません. 私は何かが欠けていることを知っていますが、それは何ですか:)。

  2. また、ビューが汎用的で、多くの種類のモデル (PropertyGrid など) を処理できる場合も同様です。ViewModel は DataTemplate と一緒に使用することをお勧めしますが、この場合、モデル内のエンティティごとにテンプレートを作成することはできず、実行時に調査する必要があるだけです。何をお勧めしますか?

  3. Josh Smith がスクリーンキャストでMVVM について話しているのを見ているときに、ViewModel でのモデルの再公開は DRY に違反していると感じました (繰り返さないでください)。それは本当に避けられないのでしょうか? ADO.Net 動的データ メタデータ クラスが最近獲得している炎と比較して、彼がそれについて議論していないことは私を驚かせます。

それが十分に明確だったことを願っています

ありがとう

アリエル

4

4 に答える 4

6

Ad.3。ViewModel で Model を公開することを繰り返しているように見えるかもしれませんが、実際に行うことは Model を抽象化することであり、View はこの抽象化についてのみ認識します (View は ViewModel についてのみ認識します)。

これは、モデルへの変更によってビューが壊れてはならないためです。また、モデルは、さまざまなソースからデータを取得するさまざまなサービスとして実装できます。この場合、View にそれらすべてを認識させたくないので、別の抽象化である ViewModel を作成します。

于 2009-05-08T10:57:01.580 に答える
6

上記のコメントに加えて。この違いについて、私の個人的な理解を共有したいと思います。

通常、MVP には View のインターフェースがあります。IView、実際のビューを抽象化し、データをそれらの実際のビューにバインドします。代わりに、MVVM では、通常、実際のビューの DataContext を使用します。MVP の IView に似たデータバインディングを行うための XAML ユーザー コントロール。したがって、不正確ですが、バインディングは両方のパターンで似ているとしましょう。

主な違いは、Presenter と ViewModel の部分にあります。ビュー モデルは、UI とモデルの間でデータを交換するためのブリッジであるプレゼンターとは大きく異なります。実際には、その名前が意味するように、ビューのモデルです。ViewModel で公開されるデータは、主に UI プロセス用です。私の理解では、MVVM では、ViewModel はビューの抽象化です。それとは対照的に、MVP は主に IView を使用してビューを抽象化します。したがって、通常、MVVM には MVP よりもレイヤーが少ないため、MVVM で同じジョブを実行するためのコードを少なく記述できます。

MVVM: モデル - ViewModel (実際のビュー、つまり UI を表します) - 実際のビュー

MVP: モデル - プレゼンター (モデルと UI の間でデータを交換するためのブリッジ) - IView (実際のビュー、つまり UI を表す) - 実際のビュー

MVP に対する MVVM の利点は、主に Microsoft 製品の次の 2 つの優れた機能に基づいています。

  1. WPF でコマンドを実行します。Silverlight ランタイムに含まれていない実装が既にいくつかありますが、将来的には Silverlight で利用できるようになる可能性があります。

  2. WPF と Silverlight の DataContext。

于 2009-09-02T00:34:34.413 に答える
5

プレゼンターがビューのインターフェイスを知っている場合、プレゼンターが使用するすべてのビューに同じインターフェイスを持たせるか、ビューごとにプレゼンターを作成する必要があります。MVVM では、ビューは viewModel を認識し、viewModel はモデルを認識します (ただし、その逆はありません)。これは、複数のビューが VM を使用でき、複数の VM がモデルを使用できることを意味します。

2番目のポイントで何を求めているのかよくわかりません。VM はビュー (またはビューを認識) ではなく、私にとって DataTemplate はオブジェクトの表示方法を定義します。ビューに確実に属する ResourceDictionary に DataTemplates を配置しました。私の VM レイヤーの WPF 'もの' の唯一のビットは、コマンドです。

3 番目のポイントに答えるには、もう少し情報が必要です。MVVM をもう少し深く掘り下げると、おそらくそれ自体が答えになるでしょう。

ここにあなたを助けるかもしれない私の関連記事があります

幸運を。

于 2009-05-08T10:47:01.823 に答える