2011-06-24 3 views
5

Model-View-ViewModel(MVVM)アプローチは、WPF UI開発の最前線のパターンのようです。私が読んだほとんどすべての記事は、それがベストプラクティスであることを暗示しています。 RelayCommandやDelegateCommandの使い方は、多くの記事でも目立っており、MVVMを実装することはほとんど不可能なようです。 .NET 4の一部ではないのはなぜですか?RelayCommandまたはDelegateCommandがWPFに含まれないのはなぜですか?

RelayCommandは実装が非常に簡単で、多くのサードパーティのツールキットにはすでに用意されていますが、私はマイクロソフトがいわゆる「ベストプラクティス"?

答えて

0

私の個人的な意見は、RelayCommandsがMVVMの意図を破るということです。

私の意見では、それぞれのクラスが「単一責任」を果たしているので、目的ごとに1つのコマンドを実装するのは、RelayCommandsを使用するよりもベストプラクティスです。コマンドはそれ自身の動作をカプセル化し、それをビューモデルに委譲しないでください。

RelayCommandsのデバッグは、あまりにも多くの関数/アクション/デリゲートをステップしてオブジェクトからオブジェクトにジャンプする必要がある場合、あまり簡単ではありません。

+0

MVVMが約束しているものを壊すことは本当にありません。最後に、MVVMは、ビューとその背後にあるロジックなどのデカップリングに関するものであり、これらのコマンドは完全にそれを実現します。 SRPは最も重要な原則の1つですが、どこにRを置くか注意しなければなりません。RelayCommandの責任は、何かを実行する方法を提供することです。イベントへの応答です。 VM自体に「何か」があるため、コマンドには単一の依存関係(VM)しかありません。そうでなければ、コマンドは1つ以上のオブジェクトに依存してより密接な結合を導入することができます。 – stijn

+0

...しかし、それはすべてコースの正確な状況に依存します。また、VMに依存しないが、EventAggregatorなどにイベントを公開するRelayCommandsがたくさんあります。その場合、要求をVMに転送することは狂気になります。 – stijn

2

マイクロソフトはWPFを処理するため、MVVMは処理しないためです。

あなたが良いMVVMアプリケーションに必要なすべてのコンポーネントを含む完全なツールキットを使用する場合は、私はプリズムを見てみることをお勧め:A good tutorial here

基本的な理由は、Microsoftが「主流」WPFの機能(に焦点を当てていることですコントロールとバインディングの強化など)。 MVVMは、私が正しいとすれば、MVVMの基礎によって監督されます。

+1

[this](http://mvvmfoundation.codeplex.com/)を意味する場合、これは単なるライブラリであり、MVVMパターンを維持/監視しようとする人のグループではありません。 – CodeNaked

1

ほとんどの場合、それはお金になります。それは単純なクラスかもしれませんが、.NETにそれを含めるには多くの作業が必要です。 1つのクラスは、次のとおりである必要があります。

  1. リリース前に完全にテストされています。将来のバージョンでも回帰テストを実装する必要があります。
  2. いくつかの言語で完全に文書化されており、検証する必要があります。
  3. RelayCommandまたはDelegateCommandを使用すると、命名の競合があるため、すでにこれらのクラスがあるWPFが破損する可能性が高いため、名前を変更する必要があります。

これらのそれぞれには、予想よりも多くの作業が必要です(つまり、#2は最初の下書き、改訂、最終承認などが必要です)。

関連リンクhereが見つかりました。

関連する問題